欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis框架学习总结(2)

程序员文章站 2024-01-30 15:34:28
...

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>
相关标签: mybatis mysql

上一篇: 消息中间件之Kafka

下一篇: