基于Spring实战 - 整合Spring MVC,整合MyBatis
1、在pom.xml中配置MyBatis依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
2、在resources下创建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>
<!-- 全局参数 -->
<settings>
<!-- 打印 SQL 语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
<!-- 使全局的映射器启用或禁用缓存。 -->
<setting name="cacheEnabled" value="false"/>
<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->
<setting name="aggressiveLazyLoading" value="true"/>
<!-- 是否允许单条 SQL 返回多个数据集 (取决于驱动的兼容性) default:true -->
<setting name="multipleResultSetsEnabled" value="true"/>
<!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
<setting name="useColumnLabel" value="true"/>
<!-- 允许 JDBC 生成主键。需要驱动器支持。如果设为了 true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 default:false -->
<setting name="useGeneratedKeys" value="false"/>
<!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不映射 PARTIAL:部分 FULL:全部 -->
<setting name="autoMappingBehavior" value="PARTIAL"/>
<!-- 这是默认的执行类型 (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新) -->
<setting name="defaultExecutorType" value="SIMPLE"/>
<!-- 使用驼峰命名法转换字段。 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 设置本地缓存范围 session:就会有数据的共享 statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
<setting name="localCacheScope" value="SESSION"/>
<!-- 设置 JDBC 类型为空时,某些驱动程序 要指定值, default:OTHER,插入空值时不需要指定类型 -->
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
</configuration>
3、在resources下创建spring-context-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 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.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置 SqlSession -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 用于配置对应实体类所在的包,多个 package 之间可以用 ',' 号分割 -->
<property name="typeAliasesPackage" value="com.coding.cats.domain"/>
<!-- 用于配置对象关系映射配置文件所在目录 -->
<property name="mapperLocations" value="classpath:/mapper/**/*.xml"/>
<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
</bean>
<!-- 扫描 Mapper -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.coding.cats.admin.dao" />
</bean>
</beans>
至此,已完成MyBatis 整合,接下来验证一下,MyBatis 是否整合成功。
1 、在pom.xml中增加spring-test 和junit 依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
2、根据数据库中表内容创建实体类TbUser
package com.coding.cats.domain;
import java.io.Serializable;
import java.util.Date;
/**
* @author 码出高薪
* @Desc. 实体类TbUser
* @date 2020/1/15 14:56
*/
public class TbUser implements Serializable {
private Long id;
private String username;
private String password;
private String phone;
private String email;
private Date created;
private Date updated;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
@Override
public String toString() {
return "TbUser{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", phone='" + phone + '\'' +
", email='" + email + '\'' +
", created=" + created +
", updated=" + updated +
'}';
}
}
2、在Dao目录下创建TbUserDao接口
package com.coding.cats.admin.dao;
import com.coding.cats.domain.TbUser;
import java.util.List;
import org.springframework.stereotype.Repository;
/**
* @author 码出高薪
* @Desc. 定义数据访问层接口
* @date 2020/1/15 15:05
*/
@Repository
public interface TbUserDao {
/**
* 查询所有用户信息
* @return TbUser列表信息
*/
List<TbUser> getAllUserInfo();
}
3、在Service 目录下创建TbUserService接口
package com.coding.cats.admin.service;
import com.coding.cats.admin.dao.TbUserDao;
import com.coding.cats.domain.TbUser;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @author 码出高薪
* @Desc. 定义业务逻辑层接口
* @date 2020/1/15 15:10
*/
public interface TbUserService {
/**
* 选择所有用户信息
* @return List<TbUser> 用户信息列表
*/
List<TbUser> selectAllUserInfo();
}
4、在Service/impl目录下创建TbUserServiceImpl
package com.coding.cats.admin.service.impl;
import com.coding.cats.admin.dao.TbUserDao;
import com.coding.cats.admin.service.TbUserService;
import com.coding.cats.domain.TbUser;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @author 码出高薪
* @Desc. 实现业务逻辑
* @date 2020/1/15 15:16
*/
public class TbUserServiceImpl implements TbUserService {
@Autowired
private TbUserDao tbUserDao;
public List<TbUser> selectAllUserInfo() {
return tbUserDao.getAllUserInfo();
}
}
5、在resources/mapper目录下创建tbUserMapper.xml,其中select id 名称要与TbUserDao中的接口名一一对应。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.coding.cats.admin.dao.TbUserDao">
<select id="getAllUserInfo" resultType="TbUser">
SELECT
a.id,
a.username,
a.phone,
a.email,
a.created,
a.updated
FROM
tb_user AS a
</select>
</mapper>
6、在src/test/java目录下创建包名
选择java->New
->Package
->com.coding.cats.admin.service.test
7、在com.coding.cats.admin.service.test包名下,创建TblUserServiceTest
package com.coding.cats.admin.service.test;
import com.coding.cats.admin.service.TblUserService;
import com.coding.cats.domain.TblUser;
import java.util.List;
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;
/**
* @author 码出高薪
* @Desc. 测试TblUserService
* @date 2020/1/15 15:41
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-context","classpath:spring-context-druid",
"classpath:spring-context-mybatis"})
public class TblUserServiceTest {
@Autowired
private TblUserService tblUserService;
@Test
public void testSelectAllUserInfo(){
List<TblUser> tblUsers = tblUserService.selectAllUserInfo();
for(TblUser tblUser : tblUsers){
System.out.println(tblUser.getUsername());
}
}
}
运行结果:
==> Preparing: SELECT a.id, a.username, a.password, a.phone, a.email, a.created, a.updated FROM tb_user AS a
==> Parameters:
<== Columns: id, username, password, phone, email, created, updated
<== Row: 1, Jack, 123, 123, 123@qq.com, 2020-01-15 15:48:14.0, 2020-01-15 15:48:16.0
<== Row: 2, 张三, 234, 234, 234@qq.com, 2020-01-15 15:49:33.0, 2020-01-15 15:49:35.0
<== Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4816278d]
Jack
张三
由此可见, MyBatis 整合成功。
原文:https://www.cnblogs.com/9coding/p/12197856.html