Mybatis框架学习总结(2)

Mybatis框架学习总结(2)

回顾 Mybatis框架学习(1)

使用Mybatis进行CRUD操作

摘要:使用配置xml的方式来使用Mybatis的核心之处就在于配置UserDao.xml文件,首先namespace属性要映射到前面定义好的接口类,要求是全限定类名;然后是下面的操作,配置文件中是通过标签来进行CRUD操作的,常见的标签有select、update、insert、delete。

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.zhku.dao.UserDao" >
<!--    配置查询所有-->
    <select id="findAll" resultType="cn.zhku.domain.User">
        select * from user
    </select>
</mapper>

select标签

  • select标签是mybatis中最常用的标签之一,用于数据库的查询操作。
  • 要注意select标签的属性:第一个是id,id的名称要求是接口类的方法名;第二个是resultType,意思是返回的类型,要求是写要将查询结果封装的类,要写全限定类名。
  • 最简单的查询所有操作:
//定义一个查询所有用户的方法

/**
     * 查询所有的用户
     * @return
     */
    List<User> findAll();
//在UserDao.xml中写select标签

<!--查询所有-->
    <select id="findAll" resultType="cn.zhku.domain.User">
        select * from user;
    </select>
  • 根据用户id查询

先在接口类中定义好方法

//根据id查询用户方法
/**
     * 根据id查询用户
     * @param userId
     * @return
     */
    User findById(Integer userId);

配置文件写好标签内容,parameterType表示参数类型,这里是Integer; 这里要注意的是sql语句后面的#{id},这个的意思是相当于之前的写的动态sql语句中的问号“?”,括号里面的东西可以随便写,但是最好还是按照规范来写。

//
<!--根据id查询用户-->
    <select id="findById" parameterType="Integer" resultType="cn.zhku.domain.User">
        select * from user where id = #{id};
    </select>

下面是增删改的操作,需要特别注意的是这些操作要提交事务才能生效!!

update标签

  • update标签用于数据库的更新操作
  • update标签的属性:id还是和select标签一样,名称要求是接口类中的方法名称;还有一个是parameterType,这个是参数的意思,因为在执行更新操作的时候要传入参数。
  • 简单的保存用户操作:
    先定义好方法
 /**
     * 保存用户
     * @param user
     */
    void saveUser(User user);

编写配置文件,并写sql语句

<!--更新用户信息-->
    <update id="updateUser" parameterType="cn.zhku.domain.User">
        update user set username=#{userName},address=#{userAddress},sex=#{userSex},birthday=#{userBirthday} where id=#{userId};
    </update>
``最后测试`

/**
* 测试更新用户信息
*/

 //将每次测试要用上的操作都封装到方法当中,那在做很多测试的时候就不用了每次都写一样的代码了。
@Before
public void init() throws IOException {
    in = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = builder.build(in);
    sqlSession = factory.openSession();
    userDao = sqlSession.getMapper(UserDao.class);
}


@After
public void destroy() throws IOException {
    sqlSession.commit();//提交事务,这一步很重要!
    sqlSession.close();
    in.close();
}
@Test
public void testUpdateUser()throws Exception{
    User user = new User();
    user.setUserId(55);
    user.setUserName("李四");
    user.setUserAddress("广州市南沙区");
    user.setUserSex("男");
    user.setUserBirthday(new Date());

    //执行方法
    userDao.updateUser(user);
}

insert标签和delete标签

  • 其实这些操作的步骤和上面的更新是差不多的,只是配置文件中的标签和语句不一样而已。
//插入操作的配置
<!--保存用户,需要为方法提供参数-->
    <insert id="saveUser" parameterType="cn.zhku.domain.User">
        insert into user(username,address,sex,birthday) values(#{userName},#{userAddress},#{userSex},#{userBirthday});
    </insert>
//删除用户的配置
<!--删除用户-->
    <delete id="deleteUser" parameterType="Integer">
        delete from user where id = #{id}
    </delete>

配置解析

核心配置文件

  • mybatis-config.xml 系统核心配置文件
  • MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
  • 能配置的内容如下:
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->

environments元素

<environments default="development">
 <environment id="development">
   <transactionManager type="JDBC">
     <property name="..." value="..."/>
   </transactionManager>
   <dataSource type="POOLED">
     <property name="driver" value="${driver}"/>
     <property name="url" value="${url}"/>
     <property name="username" value="${username}"/>
     <property name="password" value="${password}"/>
   </dataSource>
 </environment>
</environments>

Properties优化

  • 数据库这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。下面就是优化配置文件过程。
    第一步 ; 在资源目录下新建一个jdbc.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root

第二步 : 将文件导入properties 配置文件:

<configuration>
   <!--导入properties文件-->
   <properties resource="db.properties"/>

   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="${driver}"/>
               <property name="url" value="${url}"/>
               <property name="username" value="${username}"/>
               <property name="password" value="${password}"/>
           </dataSource>
       </environment>
   </environments>
   <mappers>
       <mapper resource="cn/zhku/dao/UserDao.xml"/>
   </mappers>
</configuration>

TypeAliases优化

  • 类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
<!--配置别名,注意顺序-->
<typeAliases>
   <typeAlias type="ccn.zhku.domain.User" alias="User"/>
</typeAliases>
  • 也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
<typeAliases>
        <package name="cn.zhku.domain"/>
    </typeAliases>

其他配置浏览

  • 设置(settings)相关 => 查看帮助文档
<settings>
 <setting name="cacheEnabled" value="true"/>
 <setting name="lazyLoadingEnabled" value="true"/>
 <setting name="multipleResultSetsEnabled" value="true"/>
 <setting name="useColumnLabel" value="true"/>
 <setting name="useGeneratedKeys" value="false"/>
 <setting name="autoMappingBehavior" value="PARTIAL"/>
 <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
 <setting name="defaultExecutorType" value="SIMPLE"/>
 <setting name="defaultStatementTimeout" value="25"/>
 <setting name="defaultFetchSize" value="100"/>
 <setting name="safeRowBoundsEnabled" value="false"/>
 <setting name="mapUnderscoreToCamelCase" value="false"/>
 <setting name="localCacheScope" value="SESSION"/>
 <setting name="jdbcTypeForNull" value="OTHER"/>
 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值