Mybatis 和Spring整合之mapper代理开发

F:\1ziliao\mybatis\代码

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

<!-- 通过setting配置mybatis的运行参数
注意,设置运行参数会影响 mybatis的运行,一定要注意!
-->
<settings>
<!-- 延迟加载的总开关 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 设置为false实现按需求加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>

<!-- 定义别名 -->

<typeAliases>
<!-- 单个别名定义
type:类路径
alias:别名
-->
<!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
<!-- 批量配置
指定pojo所在包路径,自动扫描包下的pojo定义别名,别名为类名(首字母小写或大写都可以)
-->
<package name="cn.itcast.mybatis.po"/>
<!-- 如果扫描多个包中的pojo,就写多个 package-->
<!-- <package name=""/> -->
</typeAliases>

</configuration>

1.2 在spring容器中配置sqlSessionFactory  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 ">

<!-- 配置数据源dataSource -->
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="5"/>
</bean>    

<!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 配置数据源 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 加载mybatis的配置文件 -->
    <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
</bean>

<!-- 原始dao -->
<!-- <bean id="userDao" class="cn.itcast.mybatis.dao.UserDaoImpl">
    <property name="sqlSessionFactory"  ref="sqlSessionFactory"/>
</bean>
 -->

 <!-- mapper代理配置 -->
<!--  <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
         指定mapper接口
         <property name="mapperInterface" value="cn.itcast.mybatis.mapper.UserMapper"/>
         注入SqlSessionFactory
         <property name="sqlSessionFactory"  ref="sqlSessionFactory"/>
 </bean> -->
 <!-- 使用mapper扫描器创建mapper代理对象
 扫描器把自动将包下边的mapper扫描出来创建代理对象在spring容器注册,bean的id为类名(首字母小写)
  -->
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     <!-- 指定要扫描的包路径,如果要扫描多个包,中间使用半角逗号分隔
     注意:如果使用扫描器,不需要在sqlMapConfig.xml中加载mapper,要将mapper.xml和mapper.java放在同一个目录且同名
      -->
     <property name="basePackage" value="cn.itcast.mybatis.mapper"/>
     <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
 </bean>

</beans>

1.3 接口mapper.java和mapper.xml

public interface UserMapper {

    //根据用户id查询用户信息
    public User findUserById(int id)throws Exception;

    //查询用户使用resultMap
    public User findUserByIdResultMap(int id)throws Exception;

    //根据用户名称模糊查询
    public List<User> findUserByName(String username)throws Exception;

    //插入用户
    public void insertUser(User user)throws Exception;

    //更新用户
    public void updateUser(User user)throws Exception;

}
<?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映射文件是以sql语句为单位进行配置,最终将sql语句封装到MappedStatement对象中
namespace命名空间作用是更好对sql语句进行隔离,方便管理sql

注意:后期讲mybatis的mapper代理开发方式时namespace有特殊的作用,如下:
namespace等于mapper接口类路径,这样实现通过映射文件找到对应的mapper接口是哪个

 -->
<mapper namespace="cn.itcast.mybatis.mapper.UserMapper">

<!-- 打开二级缓存 -->
<!-- <cache type="org.mybatis.caches.ehcache.EhcacheCache"/> -->

<!-- 根据用户id查询一个用户信息
select:用于查询,主要配置sql语句、输入参数类型、输出结果类型
最终该 select 标签 中所配置的内容会封装到MappedStatement对象,可以将该 select称为是一个Statement
id:唯 一标识 namespace下的一个sql语句,将id称为Statement的id

parameterType:指定输入参数的类型(简单类型、自定义pojo)
#{}:表示一个占位符号,占位符号可以防止sql注入
#{value}:value表示接收输入参数的值,如果接收的输入参数是简单类型,#{}里边可以写value或其它的名称
resultType:将sql查询结果集映射成java对象
将多个列的值映射到一个对象中,需要定义的pojo,resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射
resultType 指定单条记录所映射的java对象

-->
<select id="findUserById" parameterType="int" resultType="user">
    SELECT id,username,birthday,sex,address  FROM USER WHERE id = #{id}
</select>

<!-- 使用resultMap将列名和pojo的属性值作一个对应关系,完成映射
id:唯一标识 一个元素
type:最终映射的pojo类型
-->
<resultMap type="user" id="queryUserResultMap">
    <!-- id标识 查询结果集中唯一标识列
    column:结果集中唯 一标识 的列名
    property:将唯一标识 的列所映射到的type指定的pojo的属性名
     -->
    <id column="id_" property="id"/>
    <!-- 如果结果集有多个列组合成一个唯 一标识,定义两个id标签 -->
    <!-- result表示:普通列 -->
    <result column="username_" property="username"/>
    <result column="birthday_" property="birthday"/>
    <result column="sex_" property="sex"/>
    <result column="address_" property="address"/>
</resultMap>

<!-- 查询用户,使用resultMap完成结果映射 -->
<select id="findUserByIdResultMap" parameterType="int" resultMap="queryUserResultMap">
    SELECT id id_,username username_,birthday birthday_,sex sex_,address address_  FROM USER WHERE id = #{id}
</select>

<!--
根据用户名称模糊查询用户信息列表
resultType:不管结果集记录的数量有多少,resutType指定单条记录所映射的java对象
resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射
${}:表示一个sql拼接符号,相当于字符串的拼接:
“SELECT * FROM USER WHERE username LIKE ‘%” + ${}表示的串 + “%‘”
${}:如果接收输入参数是一个简单类型,${} 中只能写value

${}实现sql拼接是无法防止sql注入的。

 -->
 <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
     SELECT * FROM USER WHERE username LIKE ‘%${value}%‘
 </select>

<!-- 添加用户
需要输入参数是多个值,如果传入简单类型是无法满足要求。
输入参数类型可以定义为pojo(cn.itcast.mybatis.po.User包括多个属性)
#{}如何获取对象的值?
#{}是通过OGNL读取对象的值,OGNL的表达式方式:属性.属性.属性。。。。直到把对象中的属性值读取过来 过止
mysql数据库通过select LAST_INSERT_ID();获取自增主键的值,在insert语句执行之后去执行LAST_INSERT_ID()获取新记录的主键
-->
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
    <!--
    keyProperty:将主键值设置到输入参数的哪个属性,设置到user的id属性中
    order:selectkey中的sql语句在insert语句执行的前或后,这里要设置成"AFTER"
    resultType:select LAST_INSERT_ID()查询出的值
     -->
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
        select LAST_INSERT_ID()
    </selectKey>
    insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
</insert>

<!-- 使用mysql的uuid生成主键 -->
<!-- <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">

    keyProperty:将主键值设置到输入参数的哪个属性,设置到user的id属性中
    order:select uuid()在insert执行之前去执行得到uuid作为主键,将主键值设置到user的属性中
    resultType:select uuid()查询出的值

    <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
        select uuid()
    </selectKey>
    insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address});
</insert> -->

<!-- 修改用户-->
<update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
 update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>

<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
    delete from user where id = #{id}
</delete>

</mapper>

1.4 spring与mybatis整合生成代理对象方法2 扫描器

原文地址:https://www.cnblogs.com/wwwzzz/p/8289757.html

时间: 2024-10-09 07:54:25

Mybatis 和Spring整合之mapper代理开发的相关文章

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学习---MyBatis知识、原始Dao开发和mapper代理开发

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

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

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

【MyBatis学习14】MyBatis和Spring整合

前面十几篇博文总结了mybatis在开发中的相关技术,但在实际中都是和spring整合开发的,所以这里总结一下mybatis和spring的整合方法,并在整合后进行测试. 1. 整合的环境 这都是老掉牙的问题了,不管是开发还是整合,首先环境肯定得有,环境嘛,除了Java环境和开发环境外,那就是jar包咯,关于mybatis和spring整合的jar包,我已经上传到下载频道了==>传送门  http://download.csdn.net/detail/eson_15/9549624 将这些jar

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

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

Mybatis和Spring整合&amp;逆向工程

Mybatis和Spring整合&逆向工程Mybatis和Spring整合mybatis整合Spring的思路目的就是将在SqlMapConfig.xml中的配置移植到Spring的applicationContext.xml文件中让spring管理SqlSessionFactory让spring管理mapper对象和dao.使用spring和mybatis整合开发mapper代理及原始dao接口.自动开启事务,自动关闭 sqlsession.让spring管理数据源( 数据库连接池)导入相关的

11.MyBatis与Spring整合

测试代码在下面(没jar) 集成步骤 1.  jar包集成: 2.  配置文件集成(数据源): 3.  Spring对SqlSessionFactory进行管理配置: 4.  Mybatis程序编写(接口.映射文件): 5.  Spring通过配置文件管理mybatis 的对象: jar包集成 Mybatis3.2.7 的jar包(mybatis核心包.依赖包) Spring3.2.0 的jar包 Spring与mybatis的集成包        数据库驱动包 Dbcp连接池包 搭建工程环境

MyBatis学习(三)---MyBatis和Spring整合

想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302.html MyBatis学习(二)---数据表之间关联 http://www.cnblogs.com/ghq120/p/8323918.html 之前两篇文章都是单独介绍了MyBatis的用法,并没有和任何框架进行整合.使用MyBatis完成数据库的操作仍有一些模板化的代码,比如关闭SqlSessi

Mybatis与Spring整合

Mybatis与Spring整合无外乎要将数据源,以及事物管理的相关配置交给spring来管理,mybatis配置负责sqlmapper的相关配置也就是dao层到sql映射的相关配置. 一下以手机管理系统dao层实现所用到的Spring与MyBatis整合为例. 1.spring中beans.xml相关配置 <!--加载数据源基本配置文件--><context:property-placeholder location="classpath:conf/jdbc.properti