Spring整合mybatis

来源:互联网 发布:淘宝信用支付怎么开通 编辑:程序博客网 时间:2024/05/20 07:51

整合思路:

  1. SqlSessionFactory对象应该放到spring容器中作为单例存在。
  2. 传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
  3. Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象
  4. 数据库的连接以及数据库连接池事务管理都交给spring容器来完成

整合需要的jar包:

  1. spring的jar包
  2. mybatis的jar包
  3. spring+mybatis的整合包
  4. MySQL的数据库驱动jar包
  5. 数据库连接池的jar包
    mybatis整合spring需要的jar包

整合的步骤:

第一步:创建一个Java工程
第二步:导入jar包(上面提到的jar包)
第三步:mybatis的配置文件sqlMapConfig.xm.
第四步:编写spring的配置文件
1.数据库连接及连接池
2.事务管理(暂时可以不配置)
3.sqlSessionFactory对象,配置到spring容器中
4.mapper代理对象或者是dao实现类配置到spring容器中
第五步:编写dao或者mapper文件
第六步:测试

传统dao开发方式

sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!-- mappers:引入映射文件,可以引入多个映射文件 -->    <mappers>        <mapper resource="sqlMap/UserMapper.xml"/>    </mappers></configuration>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:context="http://www.springframework.org/schema/context"     xmlns:p="http://www.springframework.org/schema/p"    xmlns:aop="http://www.springframework.org/schema/aop"     xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans                         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                        http://www.springframework.org/schema/context                         http://www.springframework.org/schema/context/spring-context-4.0.xsd                        http://www.springframework.org/schema/aop                         http://www.springframework.org/schema/aop/spring-aop-4.0.xsd                         http://www.springframework.org/schema/tx                         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd                        http://www.springframework.org/schema/util                         http://www.springframework.org/schema/util/spring-util-4.0.xsd">    <context:property-placeholder location="classpath:jdbc.properties"/>    <!-- 一,数据源 连接数据库 -->    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">        <property name="url" value="${jdbc.url}"></property>        <property name="driverClassName" value="${jdbc.driver}"></property>        <property name="username" value="${jdbc.username}"></property>        <property name="password" value="${jdbc.password}"></property>    </bean>    <!-- 二,工厂生产sqlSession -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource"></property>        <!-- 定义别名 -->        <property name="typeAliasesPackage" value="com.demo.pojo"></property>        <!-- 加载sqlMapperConfig -->        <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>    </bean>    <!-- 三,把工厂注入mapper层 -->    <bean class="com.demo.mapper.impl.UserMapperImpl">        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>    </bean></beans>

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--     mapper:映射文件开始标签,所有sql语句都封装到mapper标签中    namespace:命名空间,唯一标识一个映射文件,名称可以自定义    特殊情况:如果是接口代理开发情况,namespace有特殊含义,不能自定义    如果是接口代理开发,namespace必须是接口全类路径名 --><mapper namespace="com.demo.mapper.UserMapper">    <!-- 查询所有用户数据 -->    <select id="findAll" resultType="com.demo.pojo.User">        select * from user    </select>    <!--         根据id查询用户数据     -->    <select id="findUserWithId" parameterType="int" resultType="com.demo.pojo.User">        select * from user where id=#{id}    </select></mapper>

User实体类

package com.demo.pojo;import java.util.Date;public class User {    private Integer id;    private String username;    private Date birthday;    private String sex;    private String address;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    @Override    public String toString() {        return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="                + address + "]";    }}

UserMapper接口

package com.demo.mapper;import java.util.List;import com.demo.pojo.User;public interface UserMapper {    public List<User> findAll();    public User findUserWithId(int id);}

UserMapperImpl实现类

package com.demo.mapper.impl;import java.util.List;import org.mybatis.spring.support.SqlSessionDaoSupport;import com.demo.mapper.UserMapper;import com.demo.pojo.User;public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {    String ns = "com.demo.mapper.UserMapper.";    @Override    public List<User> findAll() {        List<User> list = this.getSqlSession().selectList(ns+"findAll");        return list;    }    @Override    public User findUserWithId(int id) {        User user = this.getSqlSession().selectOne(ns+"findUserWithId", id);        return user;    }}

测试

/** * 需求:spring整合mybatis测试 */@Testpublic void testSpringWithMybatis(){    //加载spring配置文件    ApplicationContext app = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");    //获取接口对象    UserMapper userMapper = app.getBean(UserMapper.class);    List<User> list = userMapper.findAll();    System.out.println(list);}

Mapper代理形式开发dao

sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!-- 如果在applicationContext.xml中配置了扫描包之后,就不需要在此配置mappers -->    <!-- 将来可以在这里引入插件 --></configuration>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:context="http://www.springframework.org/schema/context"     xmlns:p="http://www.springframework.org/schema/p"    xmlns:aop="http://www.springframework.org/schema/aop"     xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans                         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                        http://www.springframework.org/schema/context                         http://www.springframework.org/schema/context/spring-context-4.0.xsd                        http://www.springframework.org/schema/aop                         http://www.springframework.org/schema/aop/spring-aop-4.0.xsd                         http://www.springframework.org/schema/tx                         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd                        http://www.springframework.org/schema/util                         http://www.springframework.org/schema/util/spring-util-4.0.xsd">    <context:property-placeholder location="classpath:jdbc.properties"/>    <!-- 一,数据源 连接数据库 -->    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">        <property name="url" value="${jdbc.url}"></property>        <property name="driverClassName" value="${jdbc.driver}"></property>        <property name="username" value="${jdbc.username}"></property>        <property name="password" value="${jdbc.password}"></property>    </bean>    <!-- 二,工厂生产sqlSession -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource"></property>        <!-- 定义别名 -->        <property name="typeAliasesPackage" value="com.demo.pojo"></property>        <!-- 加载sqlMapConfig -->        <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>    </bean>    <!-- 三,接口代理开发,直接使用mybatis整合spring包扫描接口代理开发所在包路径即可 -->    <!--         使用接口扫描代理开发方式:必须满足5条开发规范        1,映射文件namespace必须是接口全类路径名        2,映射文件sql语句id必须是接口方法名        3,映射文件和接口必须在同一个目录,且名称相同        4,映射文件接收参数类型必须和接口传递的参数类型一致        5,映射文件返回值类型必须和接口返回值类型一致     -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="basePackage" value="com.demo.mapper"></property>    </bean></beans>

UserMapper.xml(与UserMapper在同一个目录,且名称相同)

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--     mapper:映射文件开始标签,所有sql语句都封装到mapper标签中    namespace:命名空间,唯一标识一个映射文件,名称可以自定义    特殊情况:如果是接口代理开发情况,namespace有特殊含义,不能自定义    如果是接口代理开发,namespace必须是接口全类路径名 --><mapper namespace="com.demo.mapper.UserMapper">    <!-- 查询所有用户数据 -->    <select id="findAll" resultType="com.demo.pojo.User">        select * from user    </select>    <!--         根据id查询用户数据     -->    <select id="findUserWithId" parameterType="int" resultType="com.demo.pojo.User">        select * from user where id=#{id}    </select></mapper>

User实体类
略..

UserMapper接口

package com.demo.mapper;import java.util.List;import com.demo.pojo.User;public interface UserMapper {    public List<User> findAll();    public User findUserWithId(int id);}

测试

@Testpublic void testSpringWithMybatis01(){    //加载spring配置文件    ApplicationContext app = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");    //获取接口对象    UserMapper userMapper = app.getBean(UserMapper.class);    List<User> list = userMapper.findAll();    System.out.println(list);}@Testpublic void testSpringWithMybatis02(){    //加载spring配置文件    ApplicationContext app = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");    //获取接口对象    UserMapper userMapper = app.getBean(UserMapper.class);    User user = userMapper.findUserWithId(32);    System.out.println(user);}
原创粉丝点击