Java基础-SSM之Spring和Mybatis整合案例

                Java基础-SSM之Spring和Mybatis整合案例

                                         作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

   在之前我分享过mybatis和Spring的配置案例,想必大家对它们的配置已经很熟悉了,接下来我们把两者结合起来让他们一起来协同工作,帮我们在数据库中插入数据,编程起来是相当的方便。

一.准备环境

1>.案例分析

   我们想要把一条数据插入到数据库中,利用Spring和mybatis插件来完成,大致的流程图如下:

2>.数据库配置创建测试数据表 

  在编程之前,我们需要启动数据库,并在数据库中提前创建出我们需要用到的测试表。创建过程如下:

1 create database yinzhengjie;
2 
3 use yinzhengjie;
4 
5 create table if not exists users(id int primary key auto_increment,name varchar(20) , age int) ;

二.实操演示

1>.创建新模块,引入Maven依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>cn.org.yinzhengjie</groupId>
 8     <artifactId>MySpringMybatis</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <dependencies>
12         <dependency>
13             <groupId>junit</groupId>
14             <artifactId>junit</artifactId>
15             <version>4.11</version>
16         </dependency>
17         <dependency>
18             <groupId>org.springframework</groupId>
19             <artifactId>spring-context-support</artifactId>
20             <version>4.3.5.RELEASE</version>
21         </dependency>
22         <dependency>
23             <groupId>org.springframework</groupId>
24             <artifactId>spring-jdbc</artifactId>
25             <version>4.3.5.RELEASE</version>
26         </dependency>
27         <dependency>
28             <groupId>org.mybatis</groupId>
29             <artifactId>mybatis</artifactId>
30             <version>3.2.1</version>
31         </dependency>
32         <dependency>
33             <groupId>org.mybatis</groupId>
34             <artifactId>mybatis-spring</artifactId>
35             <version>1.3.0</version>
36         </dependency>
37         <dependency>
38             <groupId>c3p0</groupId>
39             <artifactId>c3p0</artifactId>
40             <version>0.9.1.2</version>
41         </dependency>
42         <dependency>
43             <groupId>mysql</groupId>
44             <artifactId>mysql-connector-java</artifactId>
45             <version>5.1.17</version>
46         </dependency>
47         <dependency>
48             <groupId>org.aspectj</groupId>
49             <artifactId>aspectjrt</artifactId>
50             <version>1.6.1</version>
51         </dependency>
52         <dependency>
53             <groupId>org.aspectj</groupId>
54             <artifactId>aspectjweaver</artifactId>
55             <version>1.8.10</version>
56         </dependency>
57     </dependencies>
58 </project>

2>.创建相应的包并编写代码

 

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.sm.dao;
 7 
 8 import java.util.List;
 9 
10 /**
11  * Basedao,基本dao
12  */
13 public interface BaseDao<T> {
14     public void insert(T t) ;
15     public void update(T t) ;
16     public void delete(Integer id) ;
17     public T selectOne(Integer id) ;
18     public List<T> selectAll() ;
19 }
BaseDao.java 文件内容
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.sm.dao.impl;
 7 
 8 import cn.org.yinzhengjie.sm.dao.BaseDao;
 9 import cn.org.yinzhengjie.sm.domain.User;
10 import org.apache.ibatis.session.SqlSessionFactory;
11 import org.mybatis.spring.support.SqlSessionDaoSupport;
12 import org.springframework.stereotype.Repository;
13 
14 import javax.annotation.Resource;
15 import java.util.List;
16 
17 /**
18  *
19  */
20 @Repository("userDao")
21 public class UserDaoImpl extends SqlSessionDaoSupport implements BaseDao<User> {
22 
23     public void insert(User user) {
24         getSqlSession().insert("users.insert" , user) ;
25     }
26 
27     public void update(User user) {
28         getSqlSession().update("users.update", user);
29     }
30 
31     public void delete(Integer id) {
32         getSqlSession().delete("users.deleteOne", id);
33     }
34 
35     public User selectOne(Integer id) {
36         return getSqlSession().selectOne("users.selectOne", id);
37     }
38 
39     public List<User> selectAll() {
40         return getSqlSession().selectList("users.selectAll");
41     }
42 
43     @Resource(name="sqlSessionFactory")
44     public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
45         super.setSqlSessionFactory(sqlSessionFactory);
46     }
47 }
UserDaoImpl.java 文件内容
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.sm.service;
 7 
 8 import java.util.List;
 9 
10 /**
11  * Created by Administrator on 2018/7/12.
12  */
13 public interface BaseService<T> {
14     public void insert(T t);
15 
16     public void update(T t);
17 
18     public void delete(Integer id);
19 
20     public T selectOne(Integer id);
21 
22     public List<T> selectAll();
23 }
BaseService.java 文件内容
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.sm.service.impl;
 7 
 8 import cn.org.yinzhengjie.sm.dao.BaseDao;
 9 import cn.org.yinzhengjie.sm.domain.User;
10 import cn.org.yinzhengjie.sm.service.BaseService;
11 import org.springframework.stereotype.Service;
12 
13 import javax.annotation.Resource;
14 import java.util.List;
15 
16 /**
17  * 用户服务实现类
18  */
19 @Service("userService")
20 public class UserServiceImpl implements BaseService<User> {
21 
22     @Resource(name="userDao")
23     private BaseDao<User> userDao ;
24 
25     public void insert(User user) {
26         userDao.insert(user);
27     }
28 
29     public void update(User user) {
30         userDao.update(user);
31     }
32 
33     public void delete(Integer id) {
34         userDao.delete(id);
35     }
36 
37     public User selectOne(Integer id) {
38         return userDao.selectOne(id);
39     }
40 
41     public List<User> selectAll() {
42         return userDao.selectAll();
43     }
44 }
UserServiceImpl.java 文件内容
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.sm.domain;
 7 
 8 /**
 9  */
10 public class User {
11     private Integer id;
12     private String name;
13     private int age;
14 
15     public Integer getId() {
16         return id;
17     }
18 
19     public void setId(Integer id) {
20         this.id = id;
21     }
22 
23     public String getName() {
24         return name;
25     }
26 
27     public void setName(String name) {
28         this.name = name;
29     }
30 
31     public int getAge() {
32         return age;
33     }
34 
35     public void setAge(int age) {
36         this.age = age;
37     }
38 }
User.java 文件内容

3>.编写mybatis的配置文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <typeAliases>
 7         <typeAlias type="cn.org.yinzhengjie.sm.domain.User"    alias="_User" />
 8     </typeAliases>
 9     <mappers>
10         <mapper resource="UserMapper.xml"/>
11     </mappers>
12 </configuration>
mybatis-config.xml 文件内容
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 <!-- 定义名字空间 -->
 5 <mapper namespace="users">
 6     <insert id="insert">
 7         insert into users(name, age) values(#{name}, #{age}) ;
 8     </insert>
 9 
10     <update id="update">
11         update users set name = #{name} , age = #{age} where id = #{id}
12     </update>
13 
14     <delete id="deleteOne">
15         delete from users where id = #{id}
16     </delete>
17 
18     <select id="selectOne" resultType="_User">
19         select * from users where id = #{id}
20     </select>
21 
22     <select id="selectAll" resultType="_User">
23         select * from users
24     </select>
25 
26 </mapper>
UserMapper.xml 文件内容

4>.编写Spring的配置文件(环绕通知,文件名为:beans.xml)

 1 <?xml version="1.0"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xmlns:context="http://www.springframework.org/schema/context"
 6        xmlns:tx="http://www.springframework.org/schema/tx"
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans
 8                         http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
 9                         http://www.springframework.org/schema/aop
10                         http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
11                         http://www.springframework.org/schema/context
12                         http://www.springframework.org/schema/context/spring-context-4.3.xsd
13                         http://www.springframework.org/schema/tx
14                         http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
15     <context:component-scan base-package="cn.org.yinzhengjie.sm.service,cn.org.yinzhengjie.sm.dao" />
16     <!-- 数据源 -->
17     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
18         <property name="driverClass" value="com.mysql.jdbc.Driver"/>
19         <property name="jdbcUrl" value="jdbc:mysql://localhost:5200/yinzhengjie"/>
20         <property name="user" value="root"/>
21         <property name="password" value="yinzhengjie"/>
22         <property name="maxPoolSize" value="10"/>
23         <property name="minPoolSize" value="2"/>
24         <property name="initialPoolSize" value="3"/>
25         <property name="acquireIncrement" value="2"/>
26     </bean>
27 
28     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
29         <property name="dataSource" ref="dataSource"/>
30         <property name="configLocation" value="classpath:mybatis-config.xml"/>
31     </bean>
32 
33     <!-- 事务管理器,在servie层面上实现事务管理的。 -->
34     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
35         <property name="dataSource" ref="dataSource" />
36     </bean>
37 
38     <!-- 事务通知 -->
39     <tx:advice id="txAdvicd" transaction-manager="txManager">
40         <tx:attributes>
41             <tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT" />
42             <tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" />
43             <tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" />
44             <tx:method name="select*" propagation="REQUIRED" isolation="DEFAULT" read-only="true" />
45             <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" />
46         </tx:attributes>
47     </tx:advice>
48 
49     <!-- 定义环绕通知 -->
50     <aop:config>
51         <aop:advisor pointcut="execution(* *..*Service.*(..))" advice-ref="txAdvicd" />
52     </aop:config>
53 </beans>

5>.新建包名(cn.org.yinzhengjie.sm.main), 编写测试代码如下:

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.sm.main;
 7 
 8 import cn.org.yinzhengjie.sm.domain.User;
 9 import cn.org.yinzhengjie.sm.service.BaseService;
10 import org.springframework.context.ApplicationContext;
11 import org.springframework.context.support.ClassPathXmlApplicationContext;
12 
13 public class Demo {
14     public static void main(String[] args) {
15         ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
16         BaseService service = (BaseService) ac.getBean("userService");
17         User user = new User();
18         user.setName("YinZhengJie");
19         user.setAge(18);
20         service.insert(user);
21 
22         User yzj = (User)service.selectOne(1);
23         System.out.println(yzj.getName());
24     }
25 }

  以上代码执行结果如下:

6>.运行第5步的测试代码,并查看数据库信息:

 

原文地址:https://www.cnblogs.com/yinzhengjie/p/9298084.html