<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.4.6version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>5.1.2.RELEASEversion>
dependency>
主要解决的问题就是将 SqlSessionFactory 对象交由 Spring来管理。
整合常用的方式:扫描的 Mapper 动态代理
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>2.0.2version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.4.6version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
<version>5.1.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>5.1.2.RELEASEversion>
dependency>
dependencies>
pom.xml:
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-webartifactId>
<version>2.12.1version>
dependency>
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件,甚至是套接口服务器、NT的事件记录器等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
在resource下面创建log4j2.properties:
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
Console>
Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
Root>
<logger name="java.sql" level="DEBUG">logger>
<logger name="org.apache.ibatis" level="INFO">logger>
Loggers>
Configuration>
主配置文件中不再需要数据源的配置了。因为数据源要交给 Spring 容器来管理了。
创建mybatis.xml或者mybatis-config.xml:
全局属性mapUnderscoreToCamelCase,设为true 可以自动将以下画线方式命名的数据库列映射到 Java 对象的驼峰式命名属性中。
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="LOG4J2"/>
settings>
configuration>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.45version>
dependency>
<dependency>
<groupId>com.mchangegroupId>
<artifactId>c3p0artifactId>
<version>0.9.5.2version>
dependency>
② 创建数据源对象——将DataSource的创建权交由Spring容器去完成
在类路径下(resources)创建applicationContext.xml配置文件
如果出现这种情况,就找到project structure——>module
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
<property name="minPoolSize" value="${jdbc.miniPoolSize}"/>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
<property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>
<property name="maxIdleTime" value="${jdbc.maxIdleTime}"/>
<property name="checkoutTimeout" value="${jdbc.checkoutTimeout}"/>
bean>
③ 设置数据源的基本连接数据
新建一个db.properties文件,在里面编写代码:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名
jdbc.username=root
jdbc.password=root
看自己数据库用户和密码是多少,我设置的root
然后在applicationContext.xml里面继续配置
<context:property-placeholder location="classpath:db.properties"/>
④ 使用数据源获取连接资源和归还连接资源
因为建立一个数据库连接是一个非常耗时耗力的事,如果使用连接池,当我们需要连接数据库服务器的时候,只需去连接池中取出一条空闲的连接,而不是新建一条连接。这样我们就可以大大减少连接数据库的开销,从而提高了应用程序的性能。
在JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和IO资源。这是因为在Java程序与数据库之间建立连接时,数据库端要验证用户名和密码,并且要为这个连接分配资源,Java程序则要把代表连接的java.sql.Connection对象等加载到内存中,所以建立数据库连接的开销很大
为了避免频繁地创建数据库连接,工程师们提出了数据库连接池技术。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立.
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,当应用程序访问数据库时并不是直接创建Connection,而是向连接池“申请”一个Connection。如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率。
<dependency>
<groupId>com.mchangegroupId>
<artifactId>c3p0artifactId>
<version>0.9.5.2version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.12version>
dependency>
二者区别:
C3P0是一个快要淘汰的技术,操作和使用起来的话还是非常简单的,对于简化对数据库的操作来说还是非常的方便的。
Druid是目前最主流的连接池的技术,出自阿里巴巴也是使用得最多的连接池技术。
Mapper 扫描配置器 MapperScannerConfigurer 会自动生成指定的基本包中 mapper 的代
理对象。该 Bean 无需设置 id 属性
或者也可以
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis.xml"/>
<property name="mapperLocations" value="classpath:com/abc/dao/*.xml"/>
bean>
注意:这里很容易出问题,你不要看我写的,要对照你自己创建的文件名来改
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
官网文档入门:https://baomidou.com/pages/24112f/
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plusartifactId>
<version>3.1.1version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
<version>1.18.4version>
dependency>
我就因为没有去掉另外两个导致test一直出错,心态不好了。
关于时区问题
使用IDEA自动生成Java实体类
右击表,选择scripted Extensions——>Generate POJOs.groovy,一键生成POJO实体类
当然,因为导入了简化bean的Lombok,所以也可以这样
但是个人觉得,利用Idea的database数据库插件导入的实体类,已经把set、get方法给你自动写好了,你再动动鼠标或者Alt+Insert,补全也快,毕竟那三个注解只有@Data好记。
<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.example.mapper"/>
bean>
public class Test {
@Autowired
private UserMapper userMapper;
@org.junit.Test
public void testSelectList() {
List<User> users = userMapper.selectList(null);
for (User user : users) {
System.out.println(user);
}
}
参考:https://www.zhihu.com/question/349816338/answer/2388179567