0


mybatis映射器用法

上周的博客留了个伏笔,使用JDBC连接数据库与java会有很多缺点和弊端,而为了解决这些弊端,开发者们推出了一种orm模型。

1.什么是ORM模型

ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。

1.1orm模型分类

现在比较常见的orm模型有两种,分别是Hibernate和MyBatis,本文就重点来给大家讲讲mybatis映射器的具体用法。

hibernate是全自动的,而mybatis是半自动的,其区别在于hibernate可以自动化生成sql语句,而mybatis不能。这种区别就好像冲锋枪和拉栓步枪,冲锋枪只需要突突突,而拉栓步枪需要拉大栓。

两种模型的使用环境也不一样,hibernate由于sql语句固定,所以优化和修改起来困难,适用于中小企业等对于需求变化不多的项目。至于mybatis专注于sql本身,虽然需要自己写sql语句,但是相对的优化与修改就比较方便,适用于需求变化多的项目。至于二者孰优孰劣,就要看不同的使用场景了。

1.2为什么要有mybatis

奥卡姆剃刀原理,如无必要,勿增实体。

而mybatis映射器的出现,正是为了解决jdbc的几个弊端与问题的:

问题一:数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

mybatis 解决方式:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

问题二:Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

mybatis 解决方式:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

问题三:向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

mybatis 解决方式:
Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

问题四:对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象 解析比较方便。

mybatis 解决方式:
Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

2.mybatis具体怎么用

2.1前期步骤

在lib文件夹下需要加入这几个架包,可以在java官网下到。

然后点击下图按键:

这样就可以生成成功构建项目架包了。

2.2将配置文件放入项目

mybatis-config.xml为主配置文件,将主配置文件放入src文件夹下。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <typeAliases>
  7. <package name = "com.ape.bean"/>
  8. </typeAliases>
  9. <!-- 和spring整合后 environments配置将废除 -->
  10. <environments default="development">
  11. <environment id="development">
  12. <!-- 使用jdbc事务管理 -->
  13. <transactionManager type="JDBC" />
  14. <!-- 数据库连接池 -->
  15. <dataSource type="POOLED">
  16. <property name="driver" value="com.mysql.cj.jdbc.Driver" />
  17. <property name="url"
  18. value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT" />
  19. <property name="username" value="root" />
  20. <property name="password" value="123456" />
  21. </dataSource>
  22. </environment>
  23. </environments>
  24. <mappers>
  25. <mapper resource="com/ape/mapper/TeacherMapper.xml"/>
  26. </mappers>
  27. </configuration>

实体类和 接口文件跟之前的jdbc一样,这里我们把 sql语句放到了sqlMapper文件中,让sql语句进入到了配置文件中从而解决sql硬编码问题。

打开
sqlMapper.xml文件后,可以在其中写sql语句,

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="org.mybatis.example.BlogMapper">
  6. <select id="chazhaosuoyouxuesheng" resultType="com.ape.bean.Student">
  7. select * from student
  8. </select>
  9. <select id="findStu" resultType="com.ape.bean.Student" parameterType="int">
  10. <!-- #{名字} 用来接收入参 -->
  11. select * from student where sid = #{v}
  12. </select>
  13. <insert id="tianjiaxuesheng" parameterType="com.ape.bean.Student" >
  14. insert into student(sname,birthday,ssex,classid)
  15. values(#{sname},#{birthday},#{ssex},#{classid})
  16. </insert>
  17. <update id="xiugaixuesheng" parameterType="com.ape.bean.Student">
  18. update student set sname=#{sname},birthday=#{birthday},ssex = #{ssex},
  19. classid=#{classid} where sid = #{sid}
  20. </update>
  21. <delete id="shanchuxuesheng" parameterType="int">
  22. delete * from student where sid = #{v}
  23. </delete>
  24. </mapper>

2.3创建SqlSession

创建了SqlSession文件,就可以在java中做数据库的增删改查等操作了

  1. package com.ape.dao.impl;
  2. import java.util.List;
  3. import org.apache.ibatis.session.SqlSession;
  4. import com.ape.bean.Teacher;
  5. import com.ape.dao.DaoUtil;
  6. import com.ape.dao.ITeacherDao;
  7. public class TeacherDaoImpl implements ITeacherDao {
  8. @Override
  9. public int addTeacher(Teacher s) {
  10. SqlSession sqlSession = DaoUtil.getSqlSession();
  11. int ret = sqlSession.insert("tianjiaxuesheng", s);
  12. // 处理事务 mybatis 事务要手动处理
  13. if(ret > 0) {
  14. // 事务的提交
  15. sqlSession.commit();
  16. }else {
  17. // 事务的回滚
  18. sqlSession.rollback();
  19. }
  20. DaoUtil.closeSource(sqlSession);
  21. return ret;
  22. }
  23. @Override
  24. public int updateTeacher(Teacher s) {
  25. SqlSession sqlSession = DaoUtil.getSqlSession();
  26. int ret = sqlSession.update("xiugaixuesheng", s);
  27. if(ret > 0) {
  28. sqlSession.commit();
  29. }else {
  30. sqlSession.rollback();
  31. }
  32. DaoUtil.closeSource(sqlSession);
  33. return ret;
  34. }
  35. @Override
  36. public int deleteTeacher(int sid) {
  37. SqlSession sqlSession = DaoUtil.getSqlSession();
  38. int ret = sqlSession.delete("shanchulaoshi", sid);
  39. if(ret > 0) {
  40. sqlSession.commit();
  41. }else {
  42. sqlSession.rollback();
  43. }
  44. return ret;
  45. }
  46. @Override
  47. public List<Teacher> findAllTeacher() {
  48. SqlSession sqlSession = DaoUtil.getSqlSession();
  49. List<Teacher> slist = sqlSession.selectList("chazhaosuoyouxuesheng");
  50. DaoUtil.closeSource(sqlSession);
  51. return slist;
  52. }
  53. @Override
  54. public Teacher findTeacherBySid(int sid) {
  55. SqlSession sqlSession = DaoUtil.getSqlSession();
  56. Teacher s = sqlSession.selectOne("findStu",sid);
  57. DaoUtil.closeSource(sqlSession);
  58. return s;
  59. }
  60. }

3.总结

mybatis的基本操作就是以上,而其进阶操作可以通过使用动态代理,省略掉imp文件,不用创建实现类,而在之后,连sql语句也可以通过动态sql语句的设置,使得sql语句更加灵活,可以使用注解的方式,使得简单的sql语句脱离xml文件的束缚,如此种种,便是我这一周的学习所得。

行文至此,不过一些拾人牙慧,因为以鄙人的水平,短时间内也很难有建设性的创造,希望未来可以将所学所用投入工作中,创造价值,如果能使自己的知识技能更进一步,那是我之幸运。

文末借唐朝李泌十七岁时写作的一首诗,与诸君共勉。

长歌行

  1. 唐-李泌

天覆吾,地载吾,天地生吾有意无。

不然绝粒升天衢,不然鸣珂游帝都。

焉能不贵复不去,空作昂藏一丈夫。

一丈夫兮一丈夫,千生气志是良图。

请君看取百年事,业就扁舟泛五湖。

标签: mybatis java 数据库

本文转载自: https://blog.csdn.net/weixin_61789925/article/details/126146899
版权归原作者 涂碧宇 所有, 如有侵权,请联系我们删除。

“mybatis映射器用法”的评论:

还没有评论