Mybatis框架学习总结(2)
程序员文章站
2024-01-30 15:34:28
...
Mybatis框架学习总结(2)
使用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>
上一篇: 消息中间件之Kafka
推荐阅读
-
Mybatis框架学习总结(2)
-
MyBatis学习总结1
-
photoshop cs2 v9.0 绿色中文版 PHP开发框架总结收藏
-
SSM框架学习04——MyBatis关联数据查询
-
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习_基础知识
-
我的springBoot框架学习总结
-
atitit.php 流行框架 前三甲为:Laravel、Phalcon、Symfony2 attilax 总结
-
框架修炼之ssm-Mybatis学习笔记一
-
Symfony2框架学习笔记之表单用法详解,symfony2学习笔记_PHP教程
-
前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例