本節主要學習Spring-data-mybatis案例,即spring集成mybatis框架。
新建maven項目,pom.xml中配置坐標:
<dependencies> <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.7.RELEASE</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <!--mybatis-spring--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.5</version> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.7.0-M1</version> <scope>test</scope> </dependency> <!--日誌框架--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
log4j.properties
log4j.rootLogger=debug,stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/cms?useUnicode=true&characterEncoding=utf8&useSSL=truejdbc.username=rootjdbc.password=rootreadOnly=falseconnectionTimeout=30000idleTimeout=600000maxLifetime=1800000maximumPoolSize=15
applicationContext.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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 定義掃描註解所在的包 --> <context:component-scan base-package="raky.train" /> <!--1. 導入資源文件,屬性配置文件 --> <context:property-placeholder location="classpath:hikaricp.properties" /> <!--2. 配置數據源,連接池:dbcp/dbcp2/c3p0/druid/HikariCP --> <!-- druid--> <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="readOnly" value="${readOnly}" /> <property name="connectionTimeout" value="${connectionTimeout}" /> <property name="idleTimeout" value="${idleTimeout}" /> <property name="maxLifetime" value="${maxLifetime}" /> <property name="maximumPoolSize" value="${maximumPoolSize}" /> </bean> <!-- 3.集成mybatis --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入連接池 --> <property name="dataSource" ref="dataSource"/> <!-- 配置模塊別名 --> <property name="typeAliasesPackage" value="raky.train.entity" /> <!-- 配置日誌實現 --> <property name="configuration"> <bean class="org.apache.ibatis.session.Configuration"> <property name="logImpl" value="org.apache.ibatis.logging.log4j.Log4jImpl" /> <property name="mapUnderscoreToCamelCase" value="true" /> </bean> </property> <!-- 模塊配置文件 --> <property name="mapperLocations" value="classpath:mybatis/*.xml"/> </bean> <!-- 4.sqlSessionTemplate對象 ===》sqlSession封裝 --> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <!-- <constructor-arg index="0" ref="sqlSessionFactory" /> --> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> </beans>
UserMapper.xml
<?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="mybatis.UserMapper"> <!-- 只針對查詢,對象的屬性與表中的列一一對應 --> <resultMap type="User" id="selectUserResult"> <id column="id" property="id"/> <result column="name" property="name" /> <result column="pass" property="pass" /> <result column="age" property="age" /> </resultMap> <sql id="sf-user"> <where> <if test="id != null and id != 0">and id = #{id}</if> <if test="pass != null and pass != ''">and pass = #{pass}</if> <if test="name != null and name != ''">and name = #{name}</if> </where> </sql> <select id="getList" parameterType="User" resultType="User"> select * from user <include refid="sf-user" /> </select> <select id="getOne" parameterType="int" resultType="User"> select * from user where id = #{id} </select> <insert id="insert" parameterType="User"> insert into user <trim prefix="(" suffix=")" suffixOverrides=","> <if test="name != null and name !=''">name,</if> <if test="pass != null and pass !=''">pass,</if> <if test="age != null and age != 0">age,</if> </trim> <trim prefix="values(" suffix=")" suffixOverrides=","> <if test="name != null and name !=''">#{name},</if> <if test="pass != null and pass !=''">#{pass},</if> <if test="age != null and age != 0">#{age},</if> </trim> </insert> <update id="update"> update user <set> <if test="name != null and name != ''">name = #{name},</if> <if test="pass != null and pass != ''">pass = #{pass},</if> <if test="age != null and age != 0">age = #{age},</if> </set> where id = #{id} </update> <delete id="delete" parameterType="int"> delete from user where id=#{id} </delete> <delete id="deleteAll" parameterType="int[]"> delete from user where id in <foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </foreach> </delete> </mapper>
User.java
package raky.train.entity;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;@Data@Builder@NoArgsConstructor@AllArgsConstructorpublic class User { private Integer id; private String name; private String pass; private Integer age;}
UserDao.java
package raky.train.dao;import java.util.List;import raky.train.entity.User;public interface UserDao { public int insert(User user); public int update(User user); public int delete(Integer id); public User getOne(Integer id); public List<User> getList(User user);}
UserDaoImpl.java
package raky.train.dao.impl;import java.util.List;import org.mybatis.spring.SqlSessionTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import raky.train.dao.UserDao;import raky.train.entity.User;@Repositorypublic class UserDaoImpl implements UserDao{ @Autowired private SqlSessionTemplate sqlSessionTemplate; private static final String namespace="mybatis.UserMapper."; @Override public int insert(User user) { return sqlSessionTemplate.insert(namespace + "insert", user); } @Override public int update(User user) { return sqlSessionTemplate.update(namespace + "update", user); } @Override public int delete(Integer id) { return sqlSessionTemplate.delete(namespace + "delete", id); } @Override public User getOne(Integer id) { return sqlSessionTemplate.selectOne(namespace + "getOne", id); } @Override public List<User> getList(User user) { return sqlSessionTemplate.selectList(namespace + "getList", user); }}
UserService.java
package raky.train.service;import java.util.List;import raky.train.entity.User;public interface UserService { int insert(User user); int update(User user); int delete(Integer id); User getOne(Integer id); List<User> getList(User user);}
UserServiceImpl.java
package raky.train.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import raky.train.dao.UserDao;import raky.train.entity.User;import raky.train.service.UserService;@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public int insert(User user) { return userDao.insert(user); } @Override public int update(User user) { return userDao.update(user); } @Override public int delete(Integer id) { return userDao.delete(id); } @Override public User getOne(Integer id) { return userDao.getOne(id); } @Override public List<User> getList(User user) { return userDao.getList(user); }}
UserController.java
package raky.train.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import raky.train.entity.User;import raky.train.service.UserService;@Controllerpublic class UserController { @Autowired private UserService userService; public int insert(User user) { return userService.insert(user); } public int update(User user) { return userService.update(user); } public int delete(Integer id) { return userService.delete(id); } public User getOne(Integer id) { return userService.getOne(id); } public List<User> getList(User user) { return userService.getList(user); }}
UserControllerTest.java
package raky.train.controller;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;import raky.train.entity.User;import javax.annotation.Resource;import java.util.List;import static org.junit.jupiter.api.Assertions.*;@Slf4j@SpringJUnitConfig(locations = {"classpath:applicationContext.xml"})class UserControllerTest { @Resource private UserController userController; @Test void insert() { User user = User.builder().name("abc").pass("abc").build(); int result = userController.insert(user); log.info("===>user:{}",user); log.info("===>{}",result); assertEquals(result,1); } @Test void update() { User user = User.builder().id(22).name("cba").pass("cba").age(99).build(); int result = userController.update(user); log.info("===>{}",result); assertEquals(result,1); } @Test void delete() { int result = userController.delete(333); log.info("===>{}",result); assertEquals(result,0); } @Test void getOne() { User user = userController.getOne(1); log.info("===>{}",user); assertNotNull(user); } @Test void getList() { User user = User.builder().build(); List<User> userList = userController.getList(user); userList.forEach(x -> log.info("===>{}",x)); }}
調試運行測試代碼,結果如下:
至此,Spring-data-mybatis案例學習筆記整理完畢。希望對大家有幫助。越分享越快樂。