Spring 集成 MyBatis 笔记(Mybatis-Spring 的用法)- 实战部分

时间:2021-05-31 05:13:35

Spring 集成 MyBatis 笔记(Mybatis-Spring 的用法)- 实战部分

我们的例子以 dbcp 数据源为例。

配置 MapperScannerConfigurer (最佳实践)

<!-- 引入属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />

<!--本示例采用 DBCP 连接池,应预先把 DBCP 的 jar 包复制到工程的 lib 目录下。 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/liwei/ssm/mapper/*Mapper.xml" />
<!-- 还可以在这里配置 typeAliases -->
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.liwei.ssm.mapper" />
<!-- 最佳实践 它的功能跟 sqlSessionFactory 是一样的,只是它指定的是定义好的 SqlSessionFactory 对应的 bean 名称 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

配置 MapperFactoryBean (非最佳实践)

1、引入相关的 jar 包坐标依赖

compile 'org.springframework:spring-core:4.1.7.RELEASE'
compile 'org.springframework:spring-context:4.1.7.RELEASE'
compile 'org.springframework:spring-jdbc:4.1.7.RELEASE'
compile 'org.mybatis:mybatis:3.3.1'
compile 'org.mybatis:mybatis-spring:1.2.5'
compile 'commons-dbcp:commons-dbcp:1.4'
compile 'mysql:mysql-connector-java:5.1.38'
compile 'log4j:log4j:1.2.17'

以上的坐标依赖仅仅只是实现功能最基础的依赖,在实际的项目中我们肯定还是要引入 apo 、tx 、beans 模块的依赖。

2、编写 Spring4 的核心配置文件

配置文件参考片段:

<context:component-scan base-package="com.liwei.service"/>

<context:property-placeholder location="classpath:jdbc.properties"/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- todo 查这里配置的意思 -->
<!-- MaxActive,连接池的最大数据库连接数。设为0表示无限制。 -->
<property name="maxActive" value="10"></property>
<!-- maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为 0 表示无限制。 -->
<property name="maxIdle" value="10"></property>
<!-- 查这里配置的意思 -->
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/liwei/mapper/*Mapper.xml" />
</bean>

<!-- 配置 MapperFactoryBean 有个缺点,就是只要有一个 Mapper 文件,就要配置一个对应的 bean,推荐配置 MapperScannerConfigurer -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface"
value="com.liwei.mapper.UUserMapper" />

<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

3、编写测试代码

private ApplicationContext ctx;
@Before
public void before(){
ctx = new ClassPathXmlApplicationContext("beans.xml");
}

@Test
public void test01(){
DataSource dataSource = (DataSource) ctx.getBean("dataSource");
System.out.println(dataSource);
try {
Connection connection= dataSource.getConnection();
String sql = "select user_name,user_password from u_user where user_name = 'zhumei'";
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()){
String user_name = rs.getString("user_name");
String user_password = rs.getString("user_password");
System.out.println(user_name);
System.out.println(user_password);
}
} catch (SQLException e) {
e.printStackTrace();
}
}

// 直接使用 userMapper 也可以,userMapper 是我们在 beans.xml 文件中配置的一个 id
@Test
public void test02(){
UUserMapper userMapper = (UUserMapper)ctx.getBean("userMapper");
List<UUser> uUserList = userMapper.selectListBySchoolId(11);
for(UUser uUser:uUserList){
System.out.println(uUser.getUserName());
}
}

补充:数据库连接的配置文件。

# 说明:如果这里直接写 username , MyBatis 会使用系统的 username 值注入进入,就会出现莫名其妙的情况了。
jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/mybatisinaction?characterEncoding=utf8
jdbc.username = root
jdbc.password = 123456