文档章节

MyBatis入门(六)---mybatis与spring的整合

z
 zh151832
发布于 2015/11/03 18:11
字数 1912
阅读 4
收藏 0

MyBatis入门(六)---mybatis与spring的整合

一、整合需要

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>

本文转载自:http://www.cnblogs.com/liunanjava/p/4926404.html

z
粉丝 7
博文 106
码字总数 46061
作品 0
攀枝花
私信 提问
Spring+mybatis的一个简单例子

一、eclipse新建java项目取名SpringTest 二、导入sping,mybatis,jdbc(这里用postgresql)包到构建路径 三、在psql中建库、建表的脚本。 四、创建java类 student表对应的pojo对象 映射文件cn/...

wangxuwei
2016/01/09
1K
0
springmvc学习笔记(6)-springmvc整合mybatis(IDEA中通过maven构建

springmvc学习笔记(6)-springmvc整合mybatis(IDEA中通过maven构建) 标签: springmvc mybatis [TOC] 本文主要展示如何在intellij IDEA中通过maven构建springmvc+mybatis框架的开发环境。 需求...

brianway
2016/03/10
510
0
ZHENFENGSHISAN/perfect-ssm

Quick Start 项目简介 ssm系列 ssm-demo:Spring+SpringMVC+Mybatis+easyUI整合 perfect-ssm:RESTful API+redis缓存 ssm-cluster:前后端分离+集群部署 ssm-dubbo:dubbo服务化 ssm-micro-se......

ZHENFENGSHISAN
2017/09/18
0
0
springmvc+mybatis学习笔记(汇总)

springmvc+mybatis学习笔记(汇总) 标签 : springmvc mybaits [TOC] 笔记分为两大部分:mybatis和springmvc mybatis springmvc 笔记内容主要是mybatis和springmvc的一些基本概念和使用方法,...

brianway
2016/03/30
2.4K
2
mybatis入门教程之错误收集

mybatis错误一: 解决方法: mybatis 错误二: 解决方法: mybatis错误三: 解决方法: mybatis 错误四: 解决方法: mybatis 错误五: 解决方法: mybatis 错误六: mybatis 错误七: java.lang.Unsup...

残风vs逝梦
2014/06/09
12.5K
2

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript权威指南笔记14

第14章、window对象 1、计时器 I-1 setTimeout()和setInterval()可在指定时间后调用 setTimeout()返回值可传递给clearTimeout()用于取消该函数的执行。 多久后执行。 setInterval()指定时间间...

_Somuns
3分钟前
0
0
python3.7安装教程

原创 python3.7安装教程 2018-09-18 21:10:56 PtaQ 阅读数 20628更多 分类专栏: python 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文...

_纵横捭阖_
16分钟前
1
0
windows使用docker运行mysql等工具(二)安装运行mysql

今天接着上一篇的内容继续来学习安装运行mysql。建议先阅读第一篇:windows安装docker 一 查看mysql版本 如果想知道mysql镜像具体有哪几个版本,需要去docker hub查看。 地址如下: https://...

执偕
25分钟前
0
0
IT兄弟连 HTML5教程 CSS3属性特效 文字排版

direction定义文字排列方式,所有浏览器都兼容这个属性,有两个可选值rtl和ltr。文字排版的参数说明如表1所示。 表1 CSS3文字排版参数说明 上表所示,ltr是初始值,表示left-to-right,就是从...

老码农的一亩三分地
26分钟前
1
0
做好一名linux运维工程师

如何做好一个合格的运工程师,运维工程师前景怎么样呢?就这些问题,与大家交流一下。首先对于运维工程师的要求是十分严苛的了,运维工程师不但要针对不同的问题做出响应,而且需要不断的补充...

问题终结者
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部