一、整合需要

1.1、方法

上一章中的数据

需要spring通过单例方式管理SqlSessionFactory

spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession

(spring和mybatis整合自动完成)

持久层的mapper都需要由spring进行管理

二、创建项目整合环境

2.1、创建项目

2.2、数据

db.properties

#数据库配置信息
#驱动
driverClass=com.mysql.jdbc.Driver
#连接url
jdbcUrl=jdbc:mysql://localhost:3306/mybatis?character=utf8
#用户名
user=root
#密码
password=root
#连接池中保留的最小连接数
minPoolSize=10
#连接池中保留的最大连接数。Default: 15
maxPoolSize=20
#最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
maxIdletime=1800
#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3
acquireIncrement=3
#连接池中初始化连接数 应在minPoolSize与maxPoolSize之间取值。默认为3
initialPoolSize=15

2.3、confinguration

<?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>
<!--资源文件 -->
<properties resource="db.properties"/> <settings>
<!--开启延时加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!--关闭立即加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
<!--开启二级缓存 -->
<setting name="cacheEnabled" value="true" />
</settings>
<!-- 别名 -->
<typeAliases>
<!-- <typeAlias type="com.pb.mybatis.po.User" alias="User"/> -->
<package name="com.pb.ssm.po"/>
</typeAliases>
<!--配置 --> <environments default="development">
<environment id="development">
<!--事务 -->
<transactionManager type="JDBC"/>
<!--数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClass}"/>
<property name="url" value="${jdbcUrl}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.pb.ssm.mapper"/>
</mappers>
</configuration>

2.4 POJO类与接口

package com.pb.ssm.po;

import java.util.Date;

/**
* * @ClassName: Author * @Description: TODO(作者) * @author 刘楠 * @date 2015-10-31 下午12:39:33 *
*/
public class Author { //作者id
private Integer authorId;
//作者姓名
private String authorUserName;
//作者密码
private String authorPassword;
//作者邮箱
private String authorEmail;
//作者介绍
private String authroBio;
//注册时间
private Date registerTime; public Integer getAuthorId() {
return authorId;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId;
}
public String getAuthorUserName() {
return authorUserName;
}
public void setAuthorUserName(String authorUserName) {
this.authorUserName = authorUserName;
}
public String getAuthorPassword() {
return authorPassword;
}
public void setAuthorPassword(String authorPassword) {
this.authorPassword = authorPassword;
}
public String getAuthorEmail() {
return authorEmail;
}
public void setAuthorEmail(String authorEmail) {
this.authorEmail = authorEmail;
}
public String getAuthroBio() {
return authroBio;
}
public void setAuthroBio(String authroBio) {
this.authroBio = authroBio;
}
public Date getRegisterTime() {
return registerTime;
}
public void setRegisterTime(Date registerTime) {
this.registerTime = registerTime;
}
@Override
public String toString() {
return "Author [authorId=" + authorId + ", authorUserName="
+ authorUserName + ", authorPassword=" + authorPassword
+ ", authorEmail=" + authorEmail + ", authroBio=" + authroBio
+ ", registerTime=" + registerTime + "]";
} }

接口

package com.pb.ssm.mapper;

import com.pb.ssm.po.Author;

public interface AuthorMapper {

    /**
* * @Title: findAuthorById * @Description: TODO(根据id查找) * @param @param id
* @param @return 设定文件 * @return Author 返回类型 * @throws
*/
public Author findAuthorById(int id); /**
* * @Title: addAuthor * @Description: TODO(添加) * @param @param author
* @param @return 设定文件 * @return int 返回类型 * @throws
*/
public int addAuthor(Author author);
/**
* * @Title: updateAuthor * @Description: TODO(更新) * @param @param author
* @param @return 设定文件 * @return int 返回类型 * @throws
*/
public int updateAuthor(Author author); /**
* 删除 * @Title: delteAuthor * @Description: TODO(根据ID删除) * @param @param id
* @param @return 设定文件 * @return int 返回类型 * @throws
*/
public int delteAuthor(int id);
}

mapper.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="com.pb.ssm.mapper.AuthorMapper"> <!--开启本mapper下的二级缓冲
type指定为ehcachecache类开
在ehcache和mybatis的整合包中
-->
<cache /> <!--映射作者Author -->
<resultMap type="Author" id="authorResultMap">
<id property="authorId" column="author_id"/>
<result property="authorUserName" column="author_username"/>
<result property="authorPassword" column="author_password"/>
<result property="authorEmail" column="author_email"/>
<result property="authroBio" column="author_bio"/>
<result property="registerTime" column="register_time"/>
</resultMap>
<!-- 根据ID查找 -->
<select id="findAuthorById" parameterType="int" resultMap="authorResultMap">
select * from author
where author_id=#{id}
</select> <!--添加 -->
<insert id="addAuthor" parameterType="Author" useGeneratedKeys="true" keyProperty="authorId">
INSERT INTO author(author_username,author_password,author_email,author_bio)
VALUES(#{authorUserName},#{authorPassword},#{authorEmail},#{authroBio})
</insert> <update id="updateAuthor" parameterType="Author">
update author
<set>
<if test="authorUserName!=null and authorUserName!=''">author_username=#{authorUserName},</if>
<if test="authorPassword!=null and authorPassword!=''">author_password=#{authorPassword},</if>
<if test="authorEmail!=null and authorEmail!=''">author_email=#{authorEmail},</if>
<if test="authroBio!=null and authroBio!=''">author_bio=#{authroBio},</if>
<if test="registerTime!=null">register_time=#{registerTime}</if>
</set>
where author_id=#{authorId}
</update> <!--删除 -->
<delete id="delteAuthor" parameterType="int">
delete from author where author_id=#{authorId}
</delete>
</mapper>

三、使用Mybatis配置文件.xml整合

3.1、写ApplicationContext.xml

<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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd"> <!--加载配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!--配置数据源
使用第三方数据源
也可以使用dbcp
或者 spring自带的:org.springframework.jdbc.datasource.DriverManagerDataSource
-->
<bean id="dataSource" class="com.mchange.v2.c3p0.DataSources" destroy-method="close">
<!--加载数据库驱动 -->
<property name="driverClass" value="${driverClass}"/>
<!--连接数据库的URL -->
<property name="jdbcUrl" value="#{jdbcUrl}"/>
<!--连接数据库的用户名和密码 -->
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
<!-- 连接池中保留的最小连接数 -->
<property name="minPoolSize" value="${minPoolSize}"/>
<!-- 连接池中保留的最大连接数 -->
<property name="maxPoolSize" value="${maxPoolSize}"/>
<!-- 最大空闲时间 -->
<property name="maxIdletime" value="${maxIdletime}"/>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="${acquireIncrement}"/>
<!--连接池中初始化连接数 应在minPoolSize与maxPoolSize之间取值。默认为3-->
<property name="initialPoolSize" value="${initialPoolSize}"/>
</bean> <!--配置SqlSessionFacotry 在mybatis-spring包中-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据源 ,将上面的数据源注入-->
<property name="dataSource" ref="dataSource" />
<!-- 将mybatis的配置文件注入-->
<property name="configLocation" value="configuration.xml"/> </bean>

3.2、测试

package com.pb.ssm.mapper;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.pb.ssm.po.Author; public class AuthorMapperTest {
private ApplicationContext applicationContext; @Before
public void setUp() throws Exception {
applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
} @Test
public void testFindAuthorById() { AuthorMapper authorMapper = (AuthorMapper) applicationContext.getBean("authorMapper");
Author author = authorMapper.findAuthorById(2);
System.out.println(author); } @Test
public void testAddAuthor() {
// 获取会话工厂
AuthorMapper authorMapper = (AuthorMapper) applicationContext.getBean("authorMapper"); Author author=new Author();
author.setAuthorUserName("程序猿");
author.setAuthorPassword("QWERdlfdad");
author.setAuthorEmail("QWER@qq.com"); int num = authorMapper.addAuthor(author); System.out.println("num="+num);
System.out.println("添加后的ID:"+author.getAuthorId());
} @Test
public void testUpdateAuthor() {
// 获取会话工厂
AuthorMapper authorMapper = (AuthorMapper) applicationContext.getBean("authorMapper");
Author author = authorMapper.findAuthorById(13);
author.setAuthroBio("天天写代码");
author.setAuthorUserName("码农");
int num=authorMapper.updateAuthor(author); System.out.println("num="+num);
System.out.println(author);
} @Test
public void testDeleteAuthor() {
// 获取会话工厂
AuthorMapper authorMapper = (AuthorMapper) applicationContext.getBean("authorMapper");
int num= authorMapper.delteAuthor(13); } }

四、不使用mybatis配置文件

4.1、写ApplicationContext.xml

<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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd"> <!--开启自动扫描 -->
<!-- <context:component-scan base-package="com.pb.ssm"/> -->
<!--加载配置文件 -->
<context:property-placeholder location="db.properties"/>
<!--配置数据源
使用第三方数据源
也可以使用dbcp
或者 spring自带的:org.springframework.jdbc.datasource.DriverManagerDataSource
-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!--加载数据库驱动 -->
<property name="driverClass" value="${driverClass}"/>
<!--连接数据库的URL -->
<property name="jdbcUrl" value="${jdbcUrl}"/>
<!--连接数据库的用户名和密码 -->
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
</bean> <!--配置SqlSessionFacotry 在mybatis-spring包中-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据源 ,将上面的数据源注入-->
<property name="dataSource" ref="dataSource"/>
<!-- 扫描所有Mapper接口的实现类xml 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/pb/ssm/mapping/*.xml"/>
</bean> <!--为所有的Mapper接口注入sqlSessionFactory -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--基本路径 指定扫描的包名 -->
<property name="basePackage" value="com.pb.ssm.mapper"/>
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean> <!--事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>

更改Mapper.xml,因为不能使用别名,所以type要写POJO类的全路径

<?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.pb.ssm.mapper.AuthorMapper"> <!--映射作者Author -->
<resultMap type="com.pb.ssm.po.Author" id="authorResultMap">
<id property="authorId" column="author_id"/>
<result property="authorUserName" column="author_username"/>
<result property="authorPassword" column="author_password"/>
<result property="authorEmail" column="author_email"/>
<result property="authroBio" column="author_bio"/>
<result property="registerTime" column="register_time"/>
</resultMap>
<!-- 根据ID查找 -->
<select id="findAuthorById" parameterType="int" resultMap="authorResultMap">
select * from author
where author_id=#{id}
</select> <!--添加 -->
<insert id="addAuthor" parameterType="com.pb.ssm.po.Author" useGeneratedKeys="true" keyProperty="authorId">
INSERT INTO author(author_username,author_password,author_email,author_bio)
VALUES(#{authorUserName},#{authorPassword},#{authorEmail},#{authroBio})
</insert> <update id="updateAuthor" parameterType="com.pb.ssm.po.Author">
update author
<set>
<if test="authorUserName!=null and authorUserName!=''">author_username=#{authorUserName},</if>
<if test="authorPassword!=null and authorPassword!=''">author_password=#{authorPassword},</if>
<if test="authorEmail!=null and authorEmail!=''">author_email=#{authorEmail},</if>
<if test="authroBio!=null and authroBio!=''">author_bio=#{authroBio},</if>
<if test="registerTime!=null">register_time=#{registerTime}</if>
</set>
where author_id=#{authorId}
</update> <!--删除 -->
<delete id="delteAuthor" parameterType="int">
delete from author where author_id=#{authorId}
</delete>
</mapper>

测试类同上

MyBatis入门(六)---mybatis与spring的整合的更多相关文章

  1. Mybatis入门(六)联查之多对一

    Mysql可以联查,但Mybatis也可以联查只是没有MySQL联查的舒服需要配置很多文件. 开始搭建环境: MySQL新建两个表一个Student一个Teacher表: Teacher表: CREA ...

  2. mybatis入门--初识mybatis

    初识mybatis 今天,一起来说说mybits这个框架吧.这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. ...

  3. Mybatis入门之MyBatis基础

    一.MyBatis概述 1.ORM模型简介 ORM:对象关系映射(Object Relation Mapping) 1)传统JDBC程序的设计缺陷(实际项目不使用) a.大量配置信息硬编码 b.大量的 ...

  4. Mybatis入门(六)联查之一对多

    上一章说了多对一,很多学生被一个老师教,这一章是一个老师教很多学生 目录基本没有变化只是改了配置文件: 2.配置文件: TeacherMapper接口类: package com.hdlf.dao; ...

  5. <MyBatis>入门六 动态sql

    package org.maple.mapper; import org.apache.ibatis.annotations.Param; import org.maple.pojo.Employee ...

  6. mybatis入门(三):mybatis的基础特性

    mybatis的知识点: 1.mybatis和hibernate本质区别和应用场景 hibernate:是一个标准的ORM框架(Ojbect relation mapper对象关系映射).入门门槛较高 ...

  7. mybatis 学习六 MyBatis主配置文件

    在定义sqlSessionFactory时需要指定MyBatis主配置文件: <bean id="sqlSessionFactory" class="org.myb ...

  8. Spring Boot2(六):使用Spring Boot整合AOP面向切面编程

    一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop ​ aop全称Aspec ...

  9. Mybatis入门之MyBatis项目案例

    一.项目案例演示 后台管理系统用户数据维护平台 所有用户数据查询 单个用户数据查询 用户数据修改(完善资料) 锁定用户账号 删除用户账号 彻底删除用户账号 二.数据库数据准备工作 数据库:mysql ...

  10. shiro的入门实例-shiro于spring的整合

    shiro是一款java安全框架.简单而且可以满足实际的工作需要 第一步.导入maven依赖 <!-- shiro --> <dependency> <groupId&g ...

随机推荐

  1. 远程方法调用(RMI)原理与示例

    RMI介绍 远程方法调用(RMI)顾名思义是一台机器上的程序调用另一台机器上的方法.这样可以大致知道RMI是用来干什么的,但是这种理解还不太确切.RMI是Java支撑分布式系统的基石,例如著名的EJB ...

  2. Sapi 添加语法的文章(转载)

    最近在做SAPI方面的工作,比较详细的中文资料不多,遇到各种问题,本来想着做完了项目总结一下,今天看到这篇文章,对于SAPI加载识别语法方面的描述十分详细,先转过来做个备份,谢谢原文博主:djyang ...

  3. tips null和undefined的区别

    tips null和undefined的区别 1.undefined类型 undefined类型只有一个值,即特殊的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是und ...

  4. Linux内核分析课程笔记(一)

    linux内核分析课程笔记(一) 冯诺依曼体系结构 冯诺依曼体系结构实际上就是存储程序计算机. 从两个层面来讲: 从硬件的角度来看,冯诺依曼体系结构逻辑上可以抽象成CPU和内存,通过总线相连.CPU上 ...

  5. 移动前端页面与Chrome的远程真机调试

    一年不见,博客园都长草啦...... 前几日刚入手新手机小米5,系统真心流畅呀.为啥要买小米5呢,因为要提高生产力呀,好好玩移动前端开发呀哈哈哈 那么问题来了,要怎么调试手机上的前端页面呢? 很久很久 ...

  6. Java Web Cookie

    一.什么是cookie? 1.Cookie能使站点跟踪特定访问者的访问次数.最后访问时间和访问者进入站点的路径 2.Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告 3.Cook ...

  7. 那些教程没有的php2-对象

    php.net 对象 在类定义内部,可以用 new self 和 new parent 创建新对象. 当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样.可以用克 ...

  8. springMVC图片文件上传功能的实现

    在工程依赖库下添加文件上传jar包 commons-fileupload-1.2.2.jar commons-io-2.4.jar 2.jsp页面设置form表单属性enctype 在表单中上传图片时 ...

  9. 开发机多用户 xdebug 远程调试 PhpStorm

    在公司都用的远程开发机开发,每次有错误调试就得dd(xxx)然后保存真是,让我在本地开发用惯xdebug的情何以堪,所以有了下文. 1.安装配置xdebug 直接使用pecl安装即可 # pecl i ...

  10. sphinx使用随笔

    为什么需要进行全文搜索呢? 一个表中有a.b.c多个字段.我们使用sql进行like搜索的时候,往往只能匹配某个字段.或者是这样的形式:a LIKE “%关键词%”or b LIKE “关键词” 这样 ...