java-mybatis01
对象/关系映射ORM
ORM完成面向对象的编程语言DAO关系数据库的映射后,开发人员可以利用面向对象设计语言的建议易用性,也可利用关系数据库的技术优势。
ORM把关系数据库包装成面向对象的模型,采用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象,而ORM框架则将这些面向对象的操作转换成底层SQL。
把持久化对象的保存、修改、删除等操作转换为对数据库等操作。
工作机制(CRUD)
- 增(create):将一个对象插入到数据库表这种。
- 删(delete):删除对象,并从数据库中移除对应的记录。
- 改(update):修改对象的属性,并更新数据库中的记录。
- 查(read):根据查询条件查询数据库,返回对应的对象。
ORM的映射关系
- 一对一:一个对象对应数据库表中的一行。
- 一对多:一个对象对应数据库表的多条记录。
- 多对多:多个对象之间有多个关系,通常需要用中间表来进行关联。
常用ORM框架-mybatis
mybatis不完全采用对象映射方式,允许编写sql语句,并使用映射文件来进行对象映射。
MyBatis 是一款优秀的 基于 ORM 的半自动轻量级持久层框架,它支持定制化的 SQL、存储过程以及高级映射,MyBatis 避免了几乎所有 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库记录。
mybatis优势
mybatis是一个半自动化持久层框架。优势有:
- 灵活性高,支持原生SQL:可以中映射文件中编写sql。
- 避免了ORM的性能开销:mybatis提供对sql的手写控制,减少了开销。
- 支持动态SQL:能够根据条件动态的生成sql语句,通过等标签,灵活的构建。
- 简洁的映射机制
- 支持复杂的查询:可以多表连接,子查询,嵌套查询等。避免了ORM框架中复杂查询等性能损失。
- 简化了数据库事务处理:结合spring等框架的事务处理,轻松实现对数据库事务的控制,可以自动开启、提交和回滚事务,确保数据一致性和可靠性。
- 跨数据库支持
应用
- 平常开发大部分都是结合spring来使用的 引入mybatis的pom文件
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql驱动坐标--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version><scope>runtime</scope></dependency>
2.常用的标签为:
- select:查询语句
- insert:插入语句
- update:更新语句
- delete:删除语句
3.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.BasicSysUserMapper"><!-- 查询单个用户信息 --><select id="selectOne" parameterType="java.lang.String" resultType="model.BasicSysUser">SELECT*FROMuser_infoWHEREusername = #{username}</select><!-- 查询所有用户信息 --><select id="selectList" resultType="model.BasicSysUser">SELECT*FROMuser_info</select><insert id="insertBasicSysUser"parameterType="model.BasicSysUser">insert intobasic_sys_user(<trim prefix="" suffixOverrides=","><if test="id != null">id,</if><if test="userName != null">user_name,</if><if test="realName != null">real_name,</if></trim>)values(<trim prefix="" suffixOverrides=","><if test="id != null">#{id},</if><if test="userName != null">#{userName},</if><if test="realName != null">#{realName},</if></trim>)</insert><update id="updateBasicSysUser"parameterType="model.BasicSysUser">updatebasic_sys_user<set><if test="id != null">id=#{id},</if><if test="userName != null">user_name=#{userName},</if><if test="realName != null">real_name=#{realName},</if></set><where><if test="userName != null">and user_name=#{userName}</if><if test="id != null">and id=#{id}</if></where></update><!-- 删除 --><delete id="deleteBasicSysUser"parameterType="model.BasicSysUser">deletefrombasic_sys_user<where><if test="userName != null">and user_name=#{userName}</if><if test="id != null">and id=#{id}</if></where></delete>
</mapper>
4.对应的mapper文件
// 查询列表List<BasicSysUser> selectList(BasicSysUser basicSysUser);// 新增int insertBasicSysUser(BasicSysUser basicSysUser);// 更新int updateBasicSysUser(BasicSysUser basicSysUser);// 删除int deleteBasicSysUser(BasicSysUser basicSysUser);