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

                                         作者:尹正杰

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

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

一.准备环境

1>.案例分析

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

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

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

 create database yinzhengjie;

 use yinzhengjie;

 create table if not exists users(id int primary key auto_increment,name varchar(20) , age int) ;

二.实操演示

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

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.org.yinzhengjie</groupId>
<artifactId>MySpringMybatis</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>
</dependencies>
</project>

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

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.sm.dao; import java.util.List; /**
* Basedao,基本dao
*/
public interface BaseDao<T> {
public void insert(T t) ;
public void update(T t) ;
public void delete(Integer id) ;
public T selectOne(Integer id) ;
public List<T> selectAll() ;
}

BaseDao.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.sm.dao.impl; import cn.org.yinzhengjie.sm.dao.BaseDao;
import cn.org.yinzhengjie.sm.domain.User;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository; import javax.annotation.Resource;
import java.util.List; /**
*
*/
@Repository("userDao")
public class UserDaoImpl extends SqlSessionDaoSupport implements BaseDao<User> { public void insert(User user) {
getSqlSession().insert("users.insert" , user) ;
} public void update(User user) {
getSqlSession().update("users.update", user);
} public void delete(Integer id) {
getSqlSession().delete("users.deleteOne", id);
} public User selectOne(Integer id) {
return getSqlSession().selectOne("users.selectOne", id);
} public List<User> selectAll() {
return getSqlSession().selectList("users.selectAll");
} @Resource(name="sqlSessionFactory")
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
}

UserDaoImpl.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.sm.service; import java.util.List; /**
* Created by Administrator on 2018/7/12.
*/
public interface BaseService<T> {
public void insert(T t); public void update(T t); public void delete(Integer id); public T selectOne(Integer id); public List<T> selectAll();
}

BaseService.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.sm.service.impl; import cn.org.yinzhengjie.sm.dao.BaseDao;
import cn.org.yinzhengjie.sm.domain.User;
import cn.org.yinzhengjie.sm.service.BaseService;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.util.List; /**
* 用户服务实现类
*/
@Service("userService")
public class UserServiceImpl implements BaseService<User> { @Resource(name="userDao")
private BaseDao<User> userDao ; public void insert(User user) {
userDao.insert(user);
} public void update(User user) {
userDao.update(user);
} public void delete(Integer id) {
userDao.delete(id);
} public User selectOne(Integer id) {
return userDao.selectOne(id);
} public List<User> selectAll() {
return userDao.selectAll();
}
}

UserServiceImpl.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.sm.domain; /**
*/
public class User {
private Integer id;
private String name;
private int age; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

User.java 文件内容

3>.编写mybatis的配置文件

 <?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>
<typeAliases>
<typeAlias type="cn.org.yinzhengjie.sm.domain.User" alias="_User" />
</typeAliases>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>

mybatis-config.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="users">
<insert id="insert">
insert into users(name, age) values(#{name}, #{age}) ;
</insert> <update id="update">
update users set name = #{name} , age = #{age} where id = #{id}
</update> <delete id="deleteOne">
delete from users where id = #{id}
</delete> <select id="selectOne" resultType="_User">
select * from users where id = #{id}
</select> <select id="selectAll" resultType="_User">
select * from users
</select> </mapper>

UserMapper.xml 文件内容

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

 <?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<context:component-scan base-package="cn.org.yinzhengjie.sm.service,cn.org.yinzhengjie.sm.dao" />
<!-- 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:5200/yinzhengjie"/>
<property name="user" value="root"/>
<property name="password" value="yinzhengjie"/>
<property name="maxPoolSize" value="10"/>
<property name="minPoolSize" value="2"/>
<property name="initialPoolSize" value="3"/>
<property name="acquireIncrement" value="2"/>
</bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean> <!-- 事务管理器,在servie层面上实现事务管理的。 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean> <!-- 事务通知 -->
<tx:advice id="txAdvicd" transaction-manager="txManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT" />
<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" />
<tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" />
<tx:method name="select*" propagation="REQUIRED" isolation="DEFAULT" read-only="true" />
<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" />
</tx:attributes>
</tx:advice> <!-- 定义环绕通知 -->
<aop:config>
<aop:advisor pointcut="execution(* *..*Service.*(..))" advice-ref="txAdvicd" />
</aop:config>
</beans>

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

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.sm.main; import cn.org.yinzhengjie.sm.domain.User;
import cn.org.yinzhengjie.sm.service.BaseService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Demo {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
BaseService service = (BaseService) ac.getBean("userService");
User user = new User();
user.setName("YinZhengJie");
user.setAge(18);
service.insert(user); User yzj = (User)service.selectOne(1);
System.out.println(yzj.getName());
}
}

  以上代码执行结果如下:

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

Java基础-SSM之Spring和Mybatis整合案例的更多相关文章

  1. Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例

    Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...

  2. Java基础-SSM之Spring MVC入门篇

    Java基础-SSM之Spring MVC入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spring MVC简介 1>.什么是Spring MVC 答:Sprin ...

  3. Java基础-SSM之Spring的POJO(Plain Old Java Object)实现AOP

    Java基础-SSM之Spring的POJO(Plain Old Java Object)实现AOP 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 上次我分享过Spring传统的A ...

  4. Java基础-SSM之Spring的AOP编程

    Java基础-SSM之Spring的AOP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   Spring的本质说白了就是动态代理,接下来我们会体验AOP的用法.它是对OOP的 ...

  5. Java基础-SSM之Spring快速入门篇

    Java基础-SSM之Spring快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java ...

  6. Spring+springmvc+Mybatis整合案例 annotation版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:annotation版 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version=&qu ...

  7. Spring+springmvc+Mybatis整合案例 xml配置版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:xml版(myeclipse) 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version ...

  8. ssm之spring+springmvc+mybatis整合初探

    1.基本目录如下  2.首先是向lib中加入相应的jar包  3.然后在web.xml中加入配置,使spring和springmvc配置文件起作用. <?xml version="1. ...

  9. SpringMVC, Spring和Mybatis整合案例一

    一  准备工作 包括:spring(包括springmvc).mybatis.mybatis-spring整合包.数据库驱动.第三方连接池. 二  整合思路 Dao层: 1.SqlMapConfig. ...

随机推荐

  1. vue JointJS 实例demo

    前言 越来越发现,前端深入好难哦!虐成渣渣了. 需求:前端绘制灵活的关系图(此demo还是简单的,我的需求才跨出一小步) 安装 npm install jointjs 容器,工具栏 <templ ...

  2. kubernetes部署mysql

    第一章 部署K8S集群 https://www.cnblogs.com/zoulixiang/p/9504324.html 第二章 1.新建mysql-rc.yaml vi mysql-rc.yaml ...

  3. 阿里云CentOS 7.4 64位,jdk1.6、mysql5.7、tomcat6部署步骤(个人记录)

    jdk1.6.mysql5.7.tomcat6部署步骤 一.安装jdk1.6 查看当前系统jdk的版本:java -version 方法一:利用yum源来安装jdk(此方法不需要配置环境变量) 查看y ...

  4. LintCode——筛子求和

    描述:扔n个骰子,向上面的数字之和为 S .给定 Given n,请列出所有可能的 S 值及其相应的概率. 样例:给定n=1,返回 [ [1, 0.17], [2, 0.17], [3, 0.17], ...

  5. 绕过用编码方式阻止XSS攻击的几个例子

    阻止攻击的常用方法是:在将HTML返回给Web浏览器之前,对攻击者输入的HTML进行编码.HTML编码使用一些没有特定HTML意义的字符来代替那些标记字符(如尖括号).这些替代字符不会影响文本在web ...

  6. 第十七次ScrumMeeting博客

    第十七次ScrumMeeting博客 本次会议于12月7日(四)22时整在3公寓725房间召开,持续20分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和 ...

  7. SDN竞赛思考总结

    SDN竞赛思考总结 2016年下半年张老师开始着手组建SDN小组,从未接触过任何网络知识的我也有幸成为小组一员.从最开始刷Openflow交换机,Get了刷交换机的新技能;到P4FPGA的无疾而终,表 ...

  8. PAT 甲级 1022 Digital Library

    https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336 A Digital Library cont ...

  9. const和typedef的常见用法详解

    一.说说const 一般而言,const主要是用来防止定义的对象再次被修改,定义对象变量时要初始化变量. 常见用法如下: 1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int ...

  10. CUDA ---- 线程配置

    前言 线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式: 2D grid 2D block 线程索引 矩阵在memory中是row-major线性存储的: 在k ...