Mybatis+Spring3

Mybatis+spring笔记

1 <mappernamespace="com.yihaomen.mybatis.models.UserMapper">

<selectid="selectUserByID" parameterType="int"resultType="User">

select* from `user` where id = #{id}

</select>

</mapper>

Namespace需要对应需要匹配的类的路径和类名(需要存在这个类com.yihaomen.mybatis.models.UserMapper

其中id="selectUserByID"接口中需要存在selectUserById的方法

Parameter为输入参数,resultType为输出参数

User为typealias定义的别名

resultType返回基本类型或者定义的JAVABEAN,resultMap返回在mybatis中配置的自定义类型,其中resultMap中的type表示List中的类型

#{name}大小写敏感

useGeneratedKeys="true"keyProperty="id"其中seGeneratedKeys设置 为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到Student的id属性

2 多对一情况

<!-- User 联合文章进行查询方法之二的配置 (多对一的方式)-->

<resultMapid="resultUserArticleList-2" type="Article">

<idproperty="id" column="aid" />

<resultproperty="title" column="title" />

<resultproperty="content" column="content"/>

<associationproperty="user" javaType="User"resultMap="resultListUser"/>

</resultMap>

<select id="getUserArticles"parameterType="int" resultMap="resultUserArticleList">

selectuser.id,user.userName,user.userAddress,article.id      aid,article.title,article.content fromuser,article

whereuser.id=article.userid and user.id=#{id}

</select>

3 动态sql

<select id="dynamicIfTest"parameterType="Blog" resultType="Blog">

select* from t_blog where 1 = 1

<if test="title != null">

andtitle = #{title}

</if>

</select>//如果你提供了title参数,那么就满足title=#{title}

<select id="dynamicChooseTest"parameterType="Blog" resultType="Blog">

select* from t_blog where 1 = 1

<choose>

<when test="title != null">

andtitle = #{title}

</when>

<whentest="content != null">

andcontent = #{content}

</when>

<otherwise>

andowner = "owner1"

</otherwise>

</choose>

</select>//相当于java中的switch

<selectid="dynamicTrimTest" parameterType="Blog"resultType="Blog">

select* from t_blog

<trim prefix="where" prefixOverrides="and |or">

<iftest="title != null">

title= #{title}

</if>

<iftest="content != null">

andcontent = #{content}

</if>

<iftest="owner != null">

orowner = #{owner}

</if>

</trim>

</select>//select* from t_blog where ….

<select id="dynamicTrimTest"parameterType="Blog" resultType="Blog">

select* from t_blog

<trim suffix="where" prefixOverrides="and |or">

<iftest="title != null">

title= #{title}

</if>

<iftest="content != null">

andcontent = #{content}

</if>

<iftest="owner != null">

orowner = #{owner}

</if>

</trim>

</select>//select* from t_blog …. Where

<select id="dynamicWhereTest"parameterType="Blog" resultType="Blog">

select* from t_blog

<where>

<iftest="title != null">

title= #{title}

</if>

<iftest="content != null">

andcontent = #{content}

</if>

<iftest="owner != null">

andowner = #{owner}

</if>

</where>

</select>// select * fromt_blog content = #{content} 智能处理and/or

<update id="dynamicSetTest"parameterType="Blog">

updatet_blog

<set>

<iftest="title != null">

title= #{title},

</if>

<iftest="content != null">

content= #{content},

</if>

<iftest="owner != null">

owner= #{owner}

</if>

</set>

whereid = #{id}

</update>//updatet_blog set content=#{content} 智能处理“,”

<select id="dynamicForeachTest"resultType="Blog">

select* from t_blog where id in

<foreach collection="list" index="index"item="item" open="(" separator=","      close=")">

#{item}

</foreach>

</select>//select* from t_blog where id int ( ,  ,)  //单参数List的类型

<select id="dynamicForeach3Test"resultType="Blog">

select* from t_blog where title like "%"#{title}"%" and id in

<foreachcollection="Array" index="index"item="item" open="(" separator=","close=")">

#{item}

</foreach>

</select>//select* from t_blog title like "%"#{title}"%" and id in ( , ,)//ids为数组的名称

public List<BpmDefUser> getByMap(Map<String,List<Long>> map){
        Map<String,Object> params=new HashMap<String, Object>();
        params.put("relationMap", map);
        return this.getBySqlKey("getByMap", params);
}     
  <foreach collection="relationMap" index="key" item="ent" separator="union">
                SELECT *
                FROM BPM_DEF_USER
                where  RIGHT_TYPE=#{key}
                and OWNER_ID in 
                <foreach collection="ent" item="id" separator="," open="(" close=")">
                    #{id}
                </foreach>
            </foreach>      
</select>//map中必须要求每个key对应的值为List/Array, index 作为map 的key。item为map的值,index和item的值自定义

4 与spring3/springMVC的集成

mybatis原理:sqlSessionFactoryBuilder---sqlSessionFactory---sqlSession---操作数据库

mapperScannerConfig(多个)/MapperFactoryBean–-getObject()--Mapper

mybatis-spring原理:

sqlSessionFactoryBean-sqlSessoionFactoryBuilder-sqlSessionFactory—sqlSession

mapperScannerConfig(多个)/MapperFactoryBean–-getObject()--Mapper

<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="mapperLocations"

value="classpath:com/tiantian/ckeditor/mybatis/mappers/*Mapper.xml"/>

<property name="typeAliasesPackage"value="com.tiantian.ckeditor.model" />

</bean>

<bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">

<property name="mapperInterface"

value="com.tiantian.mybatis.mapper.BlogMapper" />

<property name="sqlSessionFactory" ref="sqlSessionFactory" />

</bean> //为每一个MapperInterface定义一个MapperFactoryBean

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage"value="com.tiantian.mybatis.mapper" />

</bean>//basePackage必须指定,为接口所在的位置,会把basePackage中的数据自动生成MapperFactoryBean

//dataSource必须指定,链接数据库的配置

// mapperLocations表示Mapper文件的存放位置,当Mapper文件与对应的Mapper接口处于同一位置时,可以不指定

// configLocation指定mybatis配置文件的位置,如果指定了该属性,会以该配置文件的内容构建sqlSessionFactoryBuilder,但是后面的配置信息可能会覆盖相应的信息。

// typeAliasesPackage用来为实体类所在的包定义包的别名

//typeAliases用来指定别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名

// plugins:数组类型,用来指定Mybatis的Interceptor,定义的类需要@Interceptor(…)

// typeHandlers:数组类型,表示TypeHandler (javaBean boolean 数据库char)

类需要继承typeHander,重写getResult()方法

// typeHandlersPackage:用来指定TypeHandler所在的包,如果指定了该属性,SqlSessionFactoryBean会自动把该包下面的类注册为对应的TypeHandler。多个package之间可以用逗号或者分号等来进行分隔

Eg1:

<?xml version="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="com.tiantian.mybatis"/>

<context:property-placeholderlocation="classpath:config/jdbc.properties" />

<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<propertyname="driverClassName" value="${jdbc.driver}" />

<property name="url" value="${jdbc.url}" />

<property name="username"value="${jdbc.username}" />

<property name="password"value="${jdbc.password}" />

</bean>

<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="mapperLocations"value="classpath:com/tiantian/mybatis/mapper/*.xml" />

<property name="typeAliasesPackage"value="com.tiantian.mybatis.model" />

</bean>

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage"value="com.tiantian.mybatis.mapper" />

</bean>

</beans>

Eg2:

<?xml version="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="com.tiantian.mybatis"/>

<context:property-placeholder location="classpath:config/jdbc.properties"/>

<beanid="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}" />

</bean>

<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="mapperLocations"value="classpath:com/tiantian/mybatis/mapper/*.xml" />

<property name="typeAliasesPackage"value="com.tiantian.mybatis.model" />

</bean>

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage"value="com.tiantian.mybatis.mapper" />

</bean>

</beans>

Eg3

<context:annotation-config />

<context:component-scanbase-package="com.zxh.customer.template" />

<context:property-placeholder

location="classpath:sysconfig/jdbc_config.properties"/>

<!--JNDI数据源配置 <bean id="dataSource"class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName"><value>jdbc/JTORDER</value> </property> </bean> -->

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName"value="${driver}" />

<property name="url" value="${url}" />

<property name="username" value="jtorder"/>

<property name="password" value="jtorder"/>

</bean>

<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="mapperLocations"

value="classpath*:com/zxh/customer/template/model/**/*.xml"/>

<property name="configLocation" value="classpath:sysconfig/Configuration.xml"/>

</bean>

<tx:annotation-driventransaction-manager="transactionManager"

proxy-target-class="true" />

<bean id="sqlSession"class="org.mybatis.spring.SqlSessionTemplate">

<constructor-arg index="0" ref="sqlSessionFactory"/>

<!-- <constructor-arg index="1"value="BATCH" /> 如果想要进行批量操作可加入这个属性 -->

</bean>

</beans>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-18 01:20:02

Mybatis+Spring3的相关文章

mybatis实战教程(mybatis in action),mybatis入门到精通

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibat

mybatis实战教程(mybatis in action),mybatis入门到精通(转)

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibat

mybatis学习记录

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibat

mybatis实战教程,mybatis入门到精通

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibat

mybatis入门教程(初学者必看)

什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 ses

mybatis完美实战教程

目录(?)[-] (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) 文章来源:http://blog.csdn.net/techbirds_bao/article/details/9233599/ 写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活.性能也比hibernate好.而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记.后来项目结束了,我也没写总结文档.已

个人知识管理系统Version1.0开发记录(10)

物理分页 这次我们运用Mybatis拦截器来实现物理分页,后面会运用动态sql来实现,或者运用Map/CollectionUtils/StringUtils编写工具类来实现.oracle是运用的rownum,mysql是运用的limit offset,pagesize.代码中有大量注释,可以参考Mybatis基本原理一起阅读.后面,我们会根据一些实际开发需要,把物理分页功能的代码封装成jar包,以后直接调用就好了,比如Mybatis+Spring3的运行环境,可以采用Mybatis动态sql来实

构建 struts2 spring3 mybatis 的maven项目 构建 pom.xml

学习maven项目时 搭建个ssm项目 算是给自己留个备份吧 环境说明: MyEclipse10 Maven   3.2.3 框架: struts2    2.3.24.1 spring3    3.0.5.RELEASE mybatis    3.2.2 数据库: mysql 5.7 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchem

mybatis和spring3.1整合

因spring3发布时mybatis还没有出正式版本,所以spring没有整合最新的mybatis.不过社区倒是开发了一个中间件. 需要的jar包 mybatis-3.0.6.jar mybatis-spring-1.0.2.jar 要点: 1.在spring中配置mybatis工厂类 2.在dao层使用spring注入的的工具bean对数据进行操作 整合时,可以有四种方式来使用mybatis进行数据处理. spring 中必须的配置. spring的配置文件中加入以下内容 Xml代码   <!