30Mybatis_mybatis和spring整合-原始dao开发

这篇文章很重要,

第一步:我们讲一下整合的思路:

我们以前要用Mybatis是需要sqlMapConfig.xml(这个配置文件需要配置dataource,以及mapper.xml文件。)sqlMapConfig.xml如下:

<?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的配置必须写在typeAliases的上面 -->
    <properties resource="db.properties"></properties>
<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
     <setting name="aggressiveLazyLoading" value="false"/>
</settings>

 <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理-->
            <transactionManager type="JDBC" />
        <!-- 数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>

        </environment>

    </environments>

    <!-- 把映射文件(sqlmap/user.xml)加载进sqlMapConfig.xml-->
        <mappers>

           <!--  把mapper.xml加载进sqlMapConfig.xml-->
           <!--
           遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致
           且在一个目录中。
           当着这个规范的前提是:使用mapper代理方法。

            -->
            <mapper class="cn.itcast.mybatis.mapper.OrdersMapperCustom"/>

         </mappers>

</configuration>

现在我们加入spring之后,database就要交给spring的配置文件applicationContext.xml来处理了。而且我们以前在用Dao时,传统的做法是要在Dao类中有SqlSessionFactory,现在用Spring之后,最主要的改变就是这里了。

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

spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)

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

第二步:给出具体案例:

案例结构如下:

1.lib里面的jar包如下:

2.我介绍下每个包里面的含义:

三个sourcefile:

src:有两个包:

cn.itcast.ssm.Dao包下面放着Dao和Dao继承类;

cn.itcast.ssm.po包下面放着pojo类;

config:是放配置文件的。

mybatis/sqlMapConfig.xml:mybatis总的配置文件。

spring/applicationContext.xml:spring的配置文件。

sqlmap/user.xml:mapper.xml文件

db.properties:数据库的配置文件。

log4j.properties:日志文件。

test:放置测试文件:TestSpringMybatis.java.

下面给出每个文件的具体代码:

UserDao:

package cn.itcast.ssm.Dao;

public interface UserDao {
public void  findUserById(int id);
}

UserDaoImpl:

package cn.itcast.ssm.Dao;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import cn.itcast.ssm.po.User;
//这个类继承了SqlSessionDaoSupport,可以通过this.getSqlSession()来得到SqlSession
//通过这种方式来注入。
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{

    @Override
    public void findUserById(int id) {
        SqlSession session=this.getSqlSession();
        User user=session.selectOne("test.findUserById",id);
        System.out.println(user.getUsername());

    }

}

User.xml:

package cn.itcast.ssm.po;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

public class User implements Serializable {
private int id;//对应数据库中主键
private String username;//对应数据库中用户的名称
private Date birthday;//对应数据库中的生日
private String sex;//性别
private String address;//地址

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 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;
}

}

SqlMapConfig.xml:

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

    <!-- 把映射文件(sqlmap/user.xml)加载进sqlMapConfig.xml-->
        <mappers>

            <mapper resource="sqlmap/user.xml"/>

         </mappers>

</configuration>

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
       <property name="driverClassName" value="${jdbc.driver}"></property>
       <property name="url" value="${jdbc.url}"></property>
       <property name="password" value="${jdbc.password}"></property>
       <property name="username" value="${jdbc.username}"></property>
       <property name="maxActive" value="10"></property>
       <property name="maxIdle" value="5"></property>
   </bean>
   <bean  id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="configLocation" value="mybatis/SqlMapConfig.xml"></property>
       <!-- 配置数据源 -->
       <property name="dataSource" ref="dataSource"></property>
   </bean>

   <bean id="UserDao" class="cn.itcast.ssm.Dao.UserDaoImpl">
       <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
   </bean>

</beans>

User.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">
<!-- nanmespace:命名空间。 作用就是对sql进行分类话管理,理解Sql分离

注意:使用mapper代理方式,namespace有特殊重要的作用
-->

<mapper namespace="test">

    <!-- 根据id获取用户信息 -->
    <!-- 在映射文件中配置很多sql语句 -->
    <!--
    id:标识映射文件中的sql;
    将sql语句封装到mappedStatement对象中,所以将id称为statement的id;parmenterType:指定输入的参数的类型,这里指定的int型
    #{}表示一个占位符号;
    #{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数就是简单类型,#{}中的参数名可以任意,可以value或其它名称
    resultType:指定的sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象;

     -->
    <select id="findUserById" parameterType="int" resultType="cn.itcast.ssm.po.User">
        select * from user where id = #{id}
    </select>

</mapper>

dp.properties:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybaits
jdbc.username=root
jdbc.password=root

log4j.properties:

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

TestSpringMybatis.java

package springmvc_mybatis_shen;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.ssm.Dao.UserDao;

public class TestSpringMybatis {
    ApplicationContext applicationContext;
    @Before
    public void setup()
    {//spring的方式加载配置文件
        applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");

    }
    @Test
    public void testSpringMyabtis()
    {UserDao userDao=(UserDao) applicationContext.getBean("UserDao");
    userDao.findUserById(1);

    }

}

运行结果:正确。

DEBUG [main] - Searching for key ‘spring.liveBeansView.mbeanDomain‘ in [systemProperties]
DEBUG [main] - Searching for key ‘spring.liveBeansView.mbeanDomain‘ in [systemEnvironment]
DEBUG [main] - Could not find key ‘spring.liveBeansView.mbeanDomain‘ in any property source. Returning [null]
DEBUG [main] - Returning cached instance of singleton bean ‘UserDao‘
DEBUG [main] - Creating a new SqlSession
DEBUG [main] - SqlSession [[email protected]] was not registered for synchronization because synchronization is not active
DEBUG [main] - Fetching JDBC Connection from DataSource
DEBUG [main] - JDBC Connection [jdbc:mysql://localhost:3306/mybaits, [email protected], MySQL-AB JDBC Driver] will not be managed by Spring
DEBUG [main] - ==>  Preparing: select * from user where id = ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
DEBUG [main] - Closing non transactional SqlSession [[email protected]]
DEBUG [main] - Returning JDBC Connection to DataSource
王五

时间: 2024-12-14 05:31:36

30Mybatis_mybatis和spring整合-原始dao开发的相关文章

Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发(转发同上)

前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)--MyBatis的基础知识.MybatisFirst中存在大量重复的代码.这次简化下代码: 原地址:http://www.cnblogs.com/shanheyongmu/p/7121016.html 使用MyBatis开发Dao,通常有两种方法,即原始Dao开发方法和Mapper接口开发方法. 1.SqlSession使用范围 1.1 SqlsessionFactoryBuilder 通过SqlSessionFac

【MyBatis学习03】原始dao开发方法及其弊端

上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端.mybatis中dao开发应该使用mapper代理的方法,这将在下一篇博文中介绍. 原始dao开发思路比较简单,写个dao接口和dao实现类即可.需要向dao实现类中注入sqlSessionFactory,在方法体内通过sqlSessionFactory创建sqlSession.为什么在方法体内创建呢?因为mybatis中sqlS

MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

摘自:https://www.cnblogs.com/yichunguo/p/11990961.html 目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Mapper动态代理方式 1.定义Mapper.xml(映射文件) 2.编写UserMapper.xml配置文件内容: 3.编写UserMapper(接口文件) 4.加载UserMapper.xml

mybatis(Mybatis与hibernate的不同、原始Dao开发、Mapper动态代理开发)

1.Mybatis与hibernate的不同 (1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句.mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象. mybatis需要在配置文件中书写sql语句: <delete id="deleteStudentById" parameterType="

【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发

[原文]https://www.toutiao.com/i6594610137560777223/ 一.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录.它对jdbc的操

Spring 整合Mybatis dao原始方法

先看一下项目图,基本就理解了整合的内容 这次主角不再是Mybats的配置文件SqlMapConfig.xml了,而是Spring的applicationContext.xml applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:c

mybatis入门基础(二)----原始dao的开发和mapper代理开发

阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先苦后甜嘛! 回到顶部 一:原始dao开发方法 概要:1.在上篇中搭建好的框价中编写dao接口和dao实现类 2.向dao接口实现类中注入SqlSessionFactory,在方法体内通过SqlSe

spring整合mybatis步骤分析

1.spring配置datasource bean的时候,不同的数据库连接方式有有不同的datasource实现类. 比如采用c3p0数据库连接池,要用c3p0的datasource实现类 com.mchange.v2.c3p0.ComboPooledDataSource <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name=&

MyBatis入门第2天--MyBatis与Spring整合及逆向工程

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.28 lutianfei none spring和mybatis整合 整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spring和mybatis整合自动完成) 持久层的mapper都需要由spring进行管理. 整合环境 创建一个新的java工程(接近实际开发的工程结构