设为首页 收藏本站
查看: 1116|回复: 0

[经验分享] 【原创】Mybatis学习笔记(一)——Spring集成Mybatis

[复制链接]

尚未签到

发表于 2016-11-24 10:05:52 | 显示全部楼层 |阅读模式
Mybatis学习笔记(一)

                               ——Spring集成Mybatis

 

环境和组件

  • eclipse-jee-indigo-SR2-win32-x86_64
  • Spring 3.12
  • mybatis-3.2.2
  • mybatis-spring-1.2.0
  • mysql-connector-java-5.1.23
  • log4j-1.2.17
  • cglib-nodep-2.2.3
  • 操作系统win7 64bit
  • java version "1.6.0_29"
  • MySQL 5.6

 


  • [size=1em]web项目构建

DSC0000.jpg
 


  • 应用上下文配置文件在web.xml中配置

 

<!-- spring框架 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 上下文配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml,
/WEB-INF/config/**/*.xml
</param-value>
</context-param>
 
 
 


  • 数据源配置

 

<!-- 属性文件 -->
<context:property-placeholder location="/WEB-INF/properties/**/*.properties" />
<!-- 数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
scope="singleton">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
 
 


  •  Mybatis会话工厂bean(SqlSessionFactoryBean)在applicationContext.xml中的配置

 

<!-- mybatis会话工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置文件 -->
<property name="configLocation" value="/WEB-INF/mybatis-config.xml" />
</bean>
<!-- mybatis数据映射配置文件扫描器配置 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lxl" />
<!-- 只有声明了com.lxl.core.SqlMapper注解的接口才可以被扫描 -->
<property name="annotationClass" value="com.lxl.core.SqlMapper"/>
</bean>
 
 


  •  @SqlMapper是为了让Mybatis扫描识别的一个简单注解

/**
* mybatis sql映射注解,用于mybatis自动扫描,只有此声明此注解的Mapper才会识别
*
* @author LXL
*
*/
@Target({ TYPE })
@Retention(RUNTIME)
public @interface SqlMapper {
}
 [size=1em](我尝试过使用MapperScannerConfigurer的指定包路径[size=1em]basePackage来扫描SqlMapper的方式,不过,我喜欢web应用分层调用时,使用Spring的@Service、@Resource注解自动装配,在使用包路径配置Mybatis对SqlMapper的扫描时,[size=1em][size=1em]@Service、@Resource注解不能按照类型自动装配了,必须对@Service指定id,使用@Resource是声明name,例如:@Service(value = "UserDomain")和 @Resource(name = "UserDomain"),增加了代码量,大家可以尝试一下,是否遇到和我一样的问题)
 
 


  •  对dao层接口增加@SqlMapper注解声明

/**
* 用户持久层接口
*
* @author LXL
*
*/
@SqlMapper
public interface IUserDao {
/**
* 新增
*
* @param data
* @return
*/
public User insert(User data);
/**
* 删除
*
* @param pks
*/
public void delete(String[] pks);
/**
* 更新
*
* @param data
* @return
*/
public void update(User data);
/**
* 详单
*
* @param data
* @return
*/
public User detail(User data);
/**
* 查询
*
* @param filter
* @return
*/
public List<User> query(UserQueryFilter filter);
}

  • [size=1em][size=1em]mapper配置文件

 

<?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="com.lxl.authority.user.dao.IUserDao">
<sql id="TABLE">
pub_user
</sql>
<sql id="COLUMNS">
user_id, user_code, user_name, password, group_id, is_use
</sql>
<sql id="ORDER">
<if test="order != null">
order by #{order}
</if>
<if test="!isAsc">
desc
</if>
</sql>
<resultMap id="DATA" type="com.lxl.authority.user.model.User">
<result property="isUse" column="is_use" />
</resultMap>

<insert id="insert" parameterType="com.lxl.authority.user.model.User">
insert into
<include refid="TABLE" />
(
<include refid="COLUMNS" />
)
values
(#{userId}, #{userCode},#{userName}, #{password},
#{groupId}, #{isUse})
</insert>
<delete id="delete" parameterType="java.lang.String">
delete from
<include refid="TABLE" />
where 1=1
and id in
<foreach item="item" index="index" collection="array" open="("
separator="," close=")">
#{item}
</foreach>
</delete>
<update id="update" parameterType="com.lxl.authority.user.model.User">
update
<include refid="TABLE" />
set
user_code = #{userCode},
user_name = #{userName},
password =
#{password},
group_id = #{groupId},
where
user_id = #{userId}
</update>
<select id="detail" parameterType="com.lxl.authority.user.model.User"
resultMap="DATA">
select *
from
<include refid="TABLE" />
where
user_id = #{user_id}
</select>
<select id="query" parameterType="com.lxl.authority.user.controller.UserQueryFilter"
resultMap="DATA">
select *
from
<include refid="TABLE" />
where 1=1
<if test="userId != null">
and id in
<foreach item="item" index="index" collection="id" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<if test="userCode != null">
and code in
<foreach item="item" index="index" collection="code" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<if test="userName != null">
and alias in
<foreach item="item" index="index" collection="alias" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<if test="isUse != null">
and is_use = #{isUse}
</if>
<!-- 排序 -->
<include refid="ORDER" />
</select>

</mapper>
 
 
[size=1em]经过以上步骤,spring已经完成mybatis的集成,可以尝试使用mybatis了
[size=1em]为了增加mybaits的配置,我们在applicationContext.xml中已经配置了mybatis的配置文件[size=1em]/WEB-INF/mybatis-config.xml
 


  • [size=1em][size=1em]mybatis配置的一个可用例子

 

<?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>
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="false" />
<!-- 查询时,关闭关联对象即时加载以提高性能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允许使用列标签代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- 对于批量更新操作缓存SQL以提高性能 -->
<setting name="defaultExecutorType" value="BATCH" />
<!-- 数据库超过25000秒仍未响应则超时 -->
<setting name="defaultStatementTimeout" value="25000" />
</settings>
<!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 -->
<typeAliases>
<!-- 别名声明写这里 -->
</typeAliases>
<!-- 非注解的sql映射文件配置,如果使用mybatis注解,该mapper无需配置,但是如果mybatis注解中包含@resultMap注解,则mapper必须配置,给resultMap注解使用 -->
<mappers>
<!-- 显式指定mapper配置文件写这里 采用与SqlMapper同名,并且放在同一个包下,可以自动配置,所以这里不写了 -->
</mappers>
</configuration>  
 
[size=1em] 以上是我在spring中集成mybaits的基本过程,如有不对地方,请多指教
 
 
 注:本博客文章均已注明原创和转载,如转载本博客文章,请注明原文出处或征求原作者同意。
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-304851-1-1.html 上篇帖子: MyBatis接口SelectBuilder 下篇帖子: Mybatis 简明教程(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表