Ⅰ spring-mybatis 怎么配置
数据访问层的控制,applicationContext-.xml的配置:
配置加载数据连接资源文件的配置,把数据库连接数据抽取到一个properties资源文件中方便管理。
配置为:
<!-- 加载数据库连接的资源文件 -->
<context:property-placeholder location="/WEB-INF/classes/jdbc.properties"/>
其中jdbc.properties文件的内容如下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database
jdbc.username=root
jdbc.password=1234
配置数据库连接池,这里使用的是dbcp,别忘了添加jar包!
<!-- 配置数据源 dbcp数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
Ⅱ SpringBoot整合MyBatisPlus配置动态数据源
MybatisPlus特性
快速开始
初始化测试数据表:
父工程依赖
该工程用于依赖管理,pom如下:
创建MyBaitsPlus工程
依赖如下:
properties配置
在这里配置数据库连接,以及数据连接池与mybatisplus的配置等
常规增删改查实现
创建实体类:
该lombok插件省去getset方法。
创建UserMapper接口,并且实现BaseMapper<User>这里我们指定实体类为user可直接使用接口中的方法。
UserMapper.xml,如下:
执行SQL:
在SpringBoot中使用MybatisPlus分页需要注入Bean,并且在启动类上使用@MapperScan("com.simple.spring.boot.mapper")扫描mapper文件路径如下:
使用MyBatisPlus可以为我们减少很多很多的代码,不过需要编写实体类,有失必有得。
配置动态数据源
dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。
优势
网上关于动态数据源的切换的文档有很多,核心只有两种。
如果你的数据源较少,场景不复杂,选择以上任意一种都可以。如果你需要更多特性,请尝试本动态数据源。
劣势
不能使用多数据源事务(同一个数据源下能使用事务),网上其他方案也都不能提供。
如果你需要使用到分布式事务,那么你的架构应该到了微服务化的时候了。
如果呼声强烈,项目达到800 star,作者考虑集成分布式事务。
PS: 如果您只是几个数据库但是有强烈的需求分布式事务,建议还是使用传统方式自己构建多套环境集成atomic这类,网上网络很多。
约定
建议
强烈建议在 主从模式 下遵循普遍的规则,以便他人能更轻易理解你的代码。
主数据库 建议 只执行 INSERT UPDATE DELETE 操作。
从数据库 建议 只执行 SELECT 操作。
快速开始
加入依赖:
注释掉原来的数据库配置,加入:
使用 @DS 切换数据源。
@DS 可以注解在方法上和类上, 同时存在方法注解优先于类上注解 。
注解在service实现或mapper接口方法上,但强烈不建议同时在service和mapper注解。 (可能会有问题)
如果不加入主键则使用默认数据源。
DruidDataSourceAutoConfigure会注入一个DataSourceWrapper,其会在原生的spring.datasource下找url,username,password等。而我们动态数据源的配置路径是变化的,所以需要排除:
或者在类上排除:
然后更换properties配置信息:
本篇代码案例地址:
https://github.com/450255266/open-doubi
作者:SimpleWu
出处:https://www.cnblogs.com/SimpleWu/p/10930388.html
Ⅲ spring整合mybatis查询数据库时卡死什么原因
sql锁死了吧。看看有没有锁sql语句了,再看看关联字段是不是采用相同的格式,如果不是,就会出现sql执行越来越慢,最后直接导致查询堵塞的情况
Ⅳ MyBatis如何连接数据库
通过配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.ijava.springmvc."/>
<!-- 加载配置文件 --> <!-- placeholder 占位符 -->
<context:property-placeholder location="classpath:resources/db.properties"/>
<!-- 数据库连接池 -->
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 创建对象 -->
<bean id="userDao" class="com.ijava.springmvc..UserDaoImpl"></bean>
<bean id="userService" class="com.ijava.springmvc.service.UserServiceImpl"></bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="datasource"></property>
</bean>
</beans>
Ⅳ Mybatis是什么以及Mybatis和JDBC的关系
Mybatis是什么
mybatis是一个持久层ORM框架。它内部封装了jdbc,使得开发更简洁,更高效。
MyBatis可以通过xml或注解完成ORM映射关系配置。
Mybatis和JDBC的关系
JDBC是Java提供的一个操作数据库的API; MyBatis是一个持久层ORM框架,底层是对JDBC的封装。
MyBatis对JDBC操作数据库做了一系列的优化:
(1) mybatis使用已有的连接池管理,避免浪费资源,提高程序可靠性。
(2) mybatis提供插件自动生成DAO层代码,提高编码效率和准确性。
(3)mybatis 提供了一级和二级缓存,提高了程序性能。
(4) mybatis使用动态SQL语句,提高了SQL维护。(此优势是基于XML配置)
(5) mybatis对数据库操作结果进行自动映射
MyBatis的优点和缺点
优点:
简单:易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
实用:提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我们更容易的开发和配置我们的DAL层。
灵活:通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
功能完整:提供了连接管理,缓存支持,线程支持,(分布式)事物管理,通过配置作关系对象映射等数据访问层需要解决的问题。提供了DAO支持,并在DAO框架中封装了ADO.NET,NHibernate和DataMapper。
增强系统的可维护性:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
缺点:
sql工作量很大,尤其是字段多、关联表多时,更是如此。
sql依赖于数据库,导致数据库移植性差。
由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。
字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)。
DAO层过于简单,对象组装的工作量较大。
不支持级联更新、级联删除。
编写动态sql时,不方便调试,尤其逻辑复杂时。
提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。使用不当,容易导致N+1的sql性能问题。
Ⅵ MyBatis 怎样使用JNDI连接数据库
JNDI是J2EE中一个很重要的标准,通常我们是在J2EE编程中用到,Tomcat中提供了在JSP和Servelt中直接使用JNDI的方法,主要是通过dbcp连接池
重点讲使用:
1.配置context.xml
注意地址是:tomcat安装目录下的conf,该目录下应该有了context.xml文件。貌似以前的版本是在项目目录中的META-INF目录下配置,我刚开始时参考是也是老版本的操作方法,谁知道试了一晚都不行。。。如果不是那里配置的话会可能出现这样的错误提示:javax.naming.NameNotFoundException: Name jdbc is not bound in this Context?
现在开始配置:
<Context path="/Manager" reloadable="true">
<Resource
name="hello"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
username="root"
password="123456"
maxIdle="4"
maxActive="4"