1、 Mybatis逆向工程
配置文件generatorConfig.xml在相应的maven工程中内容为:
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- mybatis-generator:generate -->
<context id="atguiguTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是;false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/project_crowd?useUnicode=true&characterEncoding=utf8"
userId="root"
password="xxxx">
</jdbcConnection>
<!-- 默认 false,把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true 时把
JDBC DECIMAL
和 NUMERIC 类型解析为 java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成 Entity 类的路径 -->
<javaModelGenerator targetProject=".\src\main\java"
targetPackage="com.atguigu.crowd.entity">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:XxxMapper.xml 映射文件生成的路径 -->
<sqlMapGenerator targetProject=".\src\main\java"
targetPackage="com.atguigu.crowd.mapper">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:Mapper 接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetProject=".\src\main\java"
targetPackage="com.atguigu.crowd.mapper">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据库表名字和我们的 entity 类对应的映射指定 -->
<table tableName="t_admin" domainObjectName="Admin" />
</context>
</generatorConfiguration>
包括数据库连接信息、目标工程路径、映射文件生成路径、接口生成的路径以及数据库表与实体类对应的映射指定。
2、 创建Spring配置文件专门配置Spring和Mybatis整合相关
主要就是加入各种Spring和Mybatis的依赖
3、 在Spring配置文件中加载jdbc.Properties属性文件
jdbc.Properties文件内容(数据库相关):
jdbc.user=root
jdbc.password=xxxx
jdbc.url=jdbc:mysql://localhost:3306/project_crowd?useUnicode=true&characterEncoding=UTF-8
jdbc.driver=com.mysql.jdbc.Driver
4、 配置数据源
5、 配置SqlSessionFactoryBean:
6、 配置MapperScannerConfigurer
以上配置在spring-persist-mybatis.xml中
a) 配置mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
b) 配置spring-persist-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--加载外部属性文件-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!--配置数据源-->
<!-- 配置数据源 com.alibaba.druid.pool.DruidDataSource-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- 连接数据库的用户名 -->
<property name="username" value="${jdbc.user}"/>
<!-- 连接数据库的密码 -->
<property name="password" value="${jdbc.password}"/>
<!-- 目标数据库的 URL 地址 -->
<property name="url" value="${jdbc.url}"/>
<!-- 数据库驱动全类名 -->
<property name="driverClassName" value="${jdbc.driver}"/>
</bean>
<!-- 配置SqlSessionFactoryBean整合Mybatis -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--指定Mybatis全局配置文件的位置-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!--指定Mapper.xml的位置-->
<property name="mapperLocations" value="classpath:mybatis.mapper/*Mapper.xml"></property>
<!--装配数据源-->
<property name="dataSource" ref="dataSource"></property>
<!-- 配置插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<props>
<!--配置数据库方言,告诉PageHelper当前使用的数据库-->
<prop key="dialect">mysql</prop>
<!--配置页码的合理化修正-->
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
<!-- 配置MapperScannerConfigurer来扫描Mapper接口所在的包-->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.atguigu.mapper"></property>
</bean>
```
包括加载外部属性文件、数据源信息、SqlSessionFactoryBean(注意指定在配置文件generatorConfig.xml生成的Mapper地址)、配置插件、配置MapperScannerConfigurer来扫描Mapper接口所在的包。
7、 测试从数据源中获取数据库连接
写一个测试类实验一下能否连接数据库
import com.atguigu.crowd.entity.Admin;
import com.atguigu.mapper.AdminMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
//再类上标记必要的注解,Spring整合Junit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml"})
public class CrowdTest {
@Autowired
private DataSource datasource;
@Autowired
private AdminMapper adminMapper;
//测试能否正常连接数据库
@Test
public void testConnection() throws SQLException {
Connection connection = datasource.getConnection();
System.out.println(connection);
}
//测试往数据库中插入是否正常
@Test
public void testInsertAdmin(){
Admin admin = new Admin(null,"tom","123123","tom","tom@qq.com",null);
int count = adminMapper.insert(admin);
System.out.println("受影响的行数:" + count);
}
}
配置过程中遇到的问题:
1、 @ContextConfiguration注解无法使用问题:需要在依赖Spring-test中删除test后就能使用(直接百度就能解决)
2、@RunWith注解无法使用,就需要将Dirctory变成test的目录就可以使用并且导入Junit依赖(测试类的注解,idea中只能用在测试的目录下,需要将目录改为测试Dirctory)
3、在测试能否操作数据库时遇到Invalid bound statement (not found): com.atguigu.mapper.AdminMapper.insert问题:
经过排查是AdminMapper.xml文件中的nameSpace中路径地址错误,导致无法找到AdminMapper接口报错。要注意在spring-persist-mybatis.xml指定XxxMapper.xml配置文件位置、Mybatis全局配置文件的位置不能出错