MyBatis和Spring框架整合

 Spring 集成 MyBatis 

将 MyBatis与 Spring 进行整合,主要解决的问题就是将 SqlSessionFactory对象交由 Spring 来管理。所以,该整合,只需要将SqlSessionFactory的对象生成器 SqlSessionFactoryBean 注册在Spring容器中,再将其注入给 Dao 的实现类即可完成整合

先大概的说一下完成需要的步骤

 1.  创建maven项目

 2. 加入maven依赖

    1)spring依赖

    2)mybatis依赖

    3)mysql驱动

    4)spring事务的依赖

    5)mybatis和spring集成的依赖

3. 创建实体类

4. 创建dao接口和mapper文件

5. 创建mybatis主配置文件、

6. 创建service接口和实现类,属性dao

7. 创建spring的配置文件:声明mybatis的对象交给spring创建

      1)数据源

      2)SqlsessionFactory

      3)Dao对象

      4)声明自定义的service

8. 创建测试类,获取service对象,通过service调用dao完成数据库的访问

要使用dao对象,需要使用getMapper()方法,

1. 获取SqlSession对象, 需要使用SqlSessionFactory的openSession()方法

2. 创建SqlSessionFactory对象。 通过读取mybatis的主配置文件,能创建SqlSessionFactory对象

在mybatis的主配置文件

1. 数据库信息

<transactionManager type="JDBC"/>
<dataSource type="POOLED">
    <!--数据库的驱动类名-->
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <!--连接数据库的url字符串-->
    <property name="url" value="jdbc:mysql://localhost:3306/springdb"/>
    <!--访问数据库的用户名-->
    <property name="username" value="root"/>
    <!--密码-->
    <property name="password" value="123456"/>
</dataSource>

2. mapper文件的位置

<mappers>
    <mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
</mappers>

通过以上的说明,我们需要让spring创建以下对象

1. 独立的连接池类的对象, 使用阿里的druid连接池

2. SqlSessionFactory对象

3. 创建出dao对象

上面三个对象的创建语法,使用xml的bean标签

数据库创建

对应数据库字段的实体类:

public class user {
    private int id;
    private String username;
    private String password;

    public user() {
    }

    public user(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

数据访问层  userDao

public interface userDao {
    //插入数据
    int insertUser(user user);
    //查询数据
    List<user> selectUsers();
}

userDao.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="cn.com.Ycy.spring_aspectJ.dao.userDao">
    <select id="selectUsers" resultType="cn.com.Ycy.spring_aspectJ.domain.user">
        select * from user_table
    </select>

    <insert id="insertUser">
        insert into user_table values (#{id},#{username},#{password})
    </insert>
</mapper>

业务逻辑层 service

这个接口完成对数据库的操作,对应着数据访问层的userDao的方法,在通过普通类实现这个接口,把userDao作为属性引入

再在实现userService接口的类中的方法,List<user> users = userdao.selectUsers();,在这里userDao是由spring创建

public interface userService {
//    插入user
    int addUser(user user);
//    查询
    List<user> selectAll();
}

业务逻辑的接口实现类

 使用实现方法访问dao数据库的操作,对应的方法访问dao数据库不同的操作,这里addUser对应着数据访问层的insertUser

import cn.com.Ycy.spring_aspectJ.dao.userDao;
import cn.com.Ycy.spring_aspectJ.domain.user;
import cn.com.Ycy.spring_aspectJ.service.userService;

import java.util.List;


public class userServiceImpl implements userService {

        private userDao userdao;
        //为了使用set注入
        public void setUserdao(userDao userdao) {
            this.userdao = userdao;
        }


        /**
         * 我们需要使用这个方法访问dao数据库的操作,
         * 就把这个userDao依赖进来
         * @param user
         * @return
         */
        @Override
        public int addUser(user user) {
            int num = 0;
            num = userdao.insertUser(user);
            return num;
        }

    /**
     * 我们需要使用这个方法访问dao数据库的操作
     * 就把这个userDao依赖进来
     * @return
     */
    @Override
    public List<user> selectAll() {
        List<user> users = userdao.selectUsers();
        return users;
    }
}

Mybatis主配置文件

感觉这个配置文件完成被spring替代了,都可以不要了

<?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>
    <!-- settings 控制mybatis全局行为 日志 -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

spring主配置文件:重头戏

1. 独立的连接池类的对象, 使用阿里的druid连接池

声明数据源DataSource ,作用是连接数据库的(就类似给非自定义的属性赋值),这个是写好的,只需要set注入属性

<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!--set注入给druidDatasource 提供连接数据信息-->
        <property name="url" value="jdbc:mysql:///users"/>
        <property name="username" value="root"/>
        <property name="password" value="ye0401"/>
        <!--    最多默认多少数量连接数据库    -->
        <property name="maxActive" value="20"/>
</bean>

2. SqlSessionFactory对象

声明是mybatis中提供的SqlsessionFactoryBean类,这个类内部创建SqlsessionFactory的,它会内部创建Sqlsession

<bean id="sqlsessionfactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <!--  这个不加也是不会报错,大部分的功能被spring替代  -->
        <property name="configLocation" value="classpath:mybatis.xml"/>
</bean>

在mybatis创建SqlsessionFactory对象是需要读取mybatis主配置文件,这个主配置文件中就有数据库信息,如下:

<environments default="mysql">
<!--  配置mysql环境 default 和id 的命名一样 -->
<environment id="mysql">
    <!--配置事务的类型  -->
    <transactionManager type="JDBC"></transactionManager>
    <!--  配置数据源 (连接池) -->
    <dataSource type="POOLED">
        <!-- 配置数据库的四个基本信息 -->
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <!--
        数据库路径写错
        java.sql.SQLException: No suitable driver found for
     -->
        <property name="url" value="jdbc:mysql:///mybatisdb"/>
        <property name="username" value="root"/>
        <property name="password" value="ye0401"/>
    </dataSource>
</environment>
</environments>

3. 创建出dao对象

创建dao对象,使用Sqlsession的getMapper(userDao.class)

userDao users = sqlSession.getMapper(userDao.class);

      1、sqlSession

      2、userDao.class

MapperScannerConfigurer:在内部调用getMapper()生成每个接口的代理对象

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
   <!-- 指定SqlsessionFactory的id-->
   <property name="sqlSessionFactoryBeanName" value="sqlsessionfactory"/>
    <!--指定userDao.clas -->
   <property name="basePackage" value="cn.com.Ycy.spring_aspectJ.dao"/>
</bean>

指定userDao.class:

MapperScannerConfigurer会扫描这个包中所有的接口,cn.com.Ycy.spring_aspectJ.dao这个是dao层的包名

把每一接口执行一次getMapper()方法,得到每一个接口的dao对象

创建好的对象放在spring的容器中的

value:可以写多个包名,逗号分开

dao对象是接口名的首字母小写

最后就是创建service层的实现类的对象

<!-- 声明service接口实现类对象   -->
<bean id="service" class="cn.com.Ycy.spring_aspectJ.service.imp.userServiceImpl">
     <!-- set注入 -->
     <property name="userdao" ref="userDao"/>
</bean>

这个ref的值是由spring创建的Dao对象的名称,就是上面的,对象名默认是首字母小写的名称

sqlSession创建的userDao users = sqlSession.getMapper(userDao.class);

测试方法

 @Test
 public void test06(){
     String config = "ApplicationContext.xml";
     ApplicationContext ac = new ClassPathXmlApplicationContext(config);
     userService service = (userService) ac.getBean("service");
     List<user> users = service.selectAll();
     for (user user : users) {
         System.out.println(user);
       }
}

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值