你的位置:首页 > Java教程

[Java教程]MyBatis入门(六)


一、整合需要

1.1、方法

上一章中的数据

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

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

(spring和mybatis整合自动完成)

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

二、创建项目整合环境

2.1、创建项目

2.2、数据

db.properties

#数据库配置信息#驱动driverClass=com.mysql.jdbc.Driver#连接urljdbcUrl=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: 3acquireIncrement=3#连接池中初始化连接数 应在minPoolSize与maxPoolSize之间取值。默认为3initialPoolSize=15

 

2.3、confinguration

<??><!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.

 

 

<??><!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 authorwhere 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配置文件.

3.1、写ApplicationContext.

<beans ="http://www.springframework.org/schema/beans"="http://www.w3.org/2001/="http://www.springframework.org/schema/context"="http://www.springframework.org/schema/aop"="http://www.springframework.org/schema/tx"="http://www.springframework.org/schema/mvc"="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsdhttp://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./></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.ClassPathimport com.pb.ssm.po.Author;public class AuthorMapperTest {  private ApplicationContext applicationContext;  @Before  public void setUp() throws Exception {    applicationContext=new ClassPath);  }  @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.

 

<beans ="http://www.springframework.org/schema/beans"="http://www.w3.org/2001/="http://www.springframework.org/schema/context"="http://www.springframework.org/schema/aop"="http://www.springframework.org/schema/tx"="http://www.springframework.org/schema/mvc"="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsdhttp://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接口的实现类--><property name="mapperLocations" value="classpath:com/pb/ssm/mapping/*./></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.

<??><!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 authorwhere 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>

 

测试类同上