这一文让你掌握JAVA_EE_MyBatis学习&开发流程

Java (3) 2024-09-18 11:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
这一文让你掌握JAVA_EE_MyBatis学习&开发流程,希望能够帮助你!!!。

这一文让你掌握JAVA_EE_MyBatis学习&开发流程_https://bianchenghao6.com/blog_Java_第1张

猿灯塔 全文略长 希望对各位有帮助! 另外!文末有令你们心动的白嫖惊喜哦! 想要的朋友关注一下小编、转发文章并私聊我哦! 

Mybais简介:

  • 作用:数据访问层框架。底层是对JDBC的封装。
  • 优点:使用mybatis时不需要编写实现类,只需要写需要执行的sql命令即可。

一、MVC开发模式

  1. 先设计数据库
  2. 写实体类-pojo,
  3. 持久层-和数据库交互的
  4. 业务层-处理业务请求
  5. 表现层-用于展示数据。

二、项目之间的数据通信

  • 项目之间如果想使用类,则在该项目下右键export,选择如下界面,选择JAR file。
这一文让你掌握JAVA_EE_MyBatis学习&开发流程_https://bianchenghao6.com/blog_Java_第2张

  • 填写路径保存,然后将生成的jar文件copy到你想调用该包里的类的路径下,然后build path,即可在该工程下使用该包里面的类。
  • 三、环境搭建

    1、导入jar包

    这一文让你掌握JAVA_EE_MyBatis学习&开发流程_https://bianchenghao6.com/blog_Java_第3张

    2、在src下新建全局配置文件(编写JDBC的四个变量)

    • 前面哪个dtd文件可以在mybatis的中文参考手册中看到复制过来就可以了。不写这句话的话是没有提示的,写的比较费劲。
    • 中间有一个mysql的url 中间的&必须用&;才可以,不然会报错。
    • 在configuration配置文件中填写内容,必须按照 configuration的dtd书写规则来写,即有一定的顺序,鼠标放到donfiguration上面会出现要编写的顺序。
    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- default引用environment的id,当前所使用的环境 --> <environments default="default"> <!-- 声明可以使用的环境-可以写多个环境 --> <environment id="default"> <!-- 使用原生JDBC事务 --> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=false & serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="qinyu888"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com\qdl\mapper\flowermapper.xml" /> </mappers> </configuration> 

    3、新建mapper结尾的包,在包下新建:实体类名+Mapper.xml

    • 文件作用:编写需要执行的 SQL 命令,把 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"> <!-- namespace:理解成实现类的全路径(包名+类名) --> <mapper namespace="a.b"> <!-- id:方法名 parameterType:定义参数类型 resultType:返回值类型 --> <select id="selAll" resultType="com.qdl.pojo.Flower"> select * from flower </select> </mapper> 

    4、测试结果

    • 只有在单独使用 mybatis 时使用,最后 ssm整合时下面代码不需要编写.
    public static void main(String[] args) throws IOException { //使用工厂设计模式 InputStream is=Resources.getResourceAsStream("mybatis.xml"); SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); //生产sqlsession SqlSession session=factory.openSession(); List<Flower> list=session.selectList("a.b.selAll"); for (Flower flower : list) { System.out.println(flower.toString()); } //关闭资源 session.close(); } 

    四、环境搭建详解

    全局配置文件中内容:

    <transactionManager/> type 属性可取值 - JDBC,事务管理使用 JDBC 原生事务管理方式 - MANAGED 把事务管理转交给其他容器.原生 JDBC 事务setAutoMapping(false); <dataSouce/>type 属性 - POOLED 使用数据库连接池 - UNPOOLED 不使用数据库连接池,和直接使用 JDBC 一样 - JNDI :java 命名目录接口技术

    五、数据库连接池

    概念:

    1. 在内存中开辟一块空间,存放多个数据库连接对象.
    2. JDBC Tomcat Pool,直接由 tomcat 产生数据库连接池.

    状态:

    1. active 状态:当前连接对象被应用程序使用中
    2. Idle 空闲状态:等待应用程序使用

    目的:

    1. 在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率.
    2. 小型项目不适用数据库连接池.

    实现 JDBC tomcat Pool 的步骤.

    1. 在 web 项目的 META-INF 中存放 context.xml,在 context.xml 编
      写数据库连接池相关属性
    <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/ssm" username="root password="smallming" maxActive="50" maxIdle="20" name="test" auth="Container" maxWait="10000" type="javax.sql.DataSource" /> </Context> 
    1. 把项目发布到 tomcat 中,数据库连接池产生了
    2. 可以在 java 中使用 jndi 获取数据库连接池中对象
      Context:上下文接口.context.xml 文件对象类型
      其中下文的test就是上面的context.xml文档中存储的name属性值,test前面的是固定的路径写法。
      ···
      Context cxt = new InitialContext();
      DataSource ds = (DataSource)
      cxt.lookup("java:comp/env/test");
      Connection conn = ds.getConnection();
      ···
    3. 当关闭连接对象时,把连接对象归还给数据库连接池,把状态
      改变成 Idle。

    六、三种查询方式

    1. selectList() 返回值为 List<resultType 属性控制>
      适用于查询结果都需要遍历的需求
    List<Flower> list = session.selectList("a.b.selAll"); for (Flower flower : list) { System.out.println(flower.toString()); } 
    1. selectOne() 返回值 Object,
      适用于返回结果只是变量或一行数据时
    int count = session.selectOne("a.b.selById"); System.out.println(count); 
    1. selectMap() 返回值 Map
      适用于需要在查询结果中通过某列的值取到这行数据的需求.
      Map<key,resultType 控制>
    Map<Object, Object> map = session.selectMap("a.b.c", "name123"); System.out.println(map); 

    七、parameterType属性

    1. 在 XXXMapper.xml 中<select><delete>等标签的 parameterType 可以
      控制参数类型
    2. SqlSession 的 selectList()和 selectOne()的第二个参数和 selectMap()
      的第三个参数都表示方法的参数
    3. 在 Mapper.xml 中可以通过#{}获取参数
    • 其中parameterType 控制参数类型
    • / #{}获取参数内容
    • 使用索引,从 0 开始 #{0}表示第一个参数,也可以使用#{param1}第一个参数
    • 如果只有一个参数(基本数据类型或 String),mybatis对#{}里面内容没有要求只要写内容即可.
    • 如果参数是对象#{属性名}
    • 如果参数是 map 写成#{key}
    <select id="selOne" resultType="com.qdl.pojo.People" parameterType="com.qdl.pojo.People"> <!-- 参数获取从0 开始 --> select * from people where id=#{id} </select> 
    1. / #{} 和 / ${} 的区别
    #{} 获取参数的内容支持索引获取,param1 获取指定位置参数,并且 SQL 使用?占位符。 ${} 字符串拼接不使用?,默认找${内容}内容的 get/set 方法,如 果写数字,就是一个数字 

    八、typeAliases 别名

    1. 系统内置别名: 把类型全小写
    2. 给某个类起别名:alias=”自定义
    <typeAliases> <typeAlias type="com.qdl.pojo.People" alias="peo"/> 可以直接在PeopleMapper.xml文件中使用peo代替整个包名和类名 <package name="com.qdl.pojo"/> 同上可以直接使用类名代替包名和类名 </typeAliases> 

    九、Mybatis实现对数据库的修改

    • 在 mybatis 中默认是关闭了 JDBC 的自动提交功能,每一个 SqlSession 默认都是不自动提交事务.
    • session.commit()提交事务.
    • openSession(true);自动提交相当于JDBC中的setAutoCommit(true);
    • JDBC 中 executeUpdate()执行新增,删除,修改的 SQL.返回值 int,表示受影响的行数.
    • mybatis 中<insert> <delete> <update>标签没有 resultType 属性,认为返回值都是 int
    • 在 openSession()时 Mybatis 会创建 SqlSession 时同时创建一个
      Transaction(事务对象),同时 autoCommit 都为 false
    • 注意:如果出现异常,应该 session.rollback()回滚事务. 而且使用插入、删除、修改的时候不能够使用select了,要使用对应的标签

    实现新增步骤:

    • 在 mapper.xml 中提供<insert>标签,标签没有返回值类型
    <insert id="ins" parameterType="People"> insert into people values(default,#{name},#{age}) </insert> 
    • 在表现层执行insert语句
    int index1 = session.insert("a.b.ins", p); if(index1>0){ System.out.println("成功"); }else{ System.out.println("失败"); } 

    实现修改

    • 在 mapper.xml 中提供<update>标签
    <update id="upd" parameterType="People"> update people set name = #{name} where id = #{id} </update> ----------------------------------------------------------------------------- People peo = new People(); peo.setId(3); peo.setName("王五"); int index = session.update("a.b.upd", peo); if(index>0){ System.out.println("成功"); }else{ System.out.println("失败"); } session.commit(); 

    实现删除:

    • 在 mapper.xml 提供<delete>标签
    <delete id="del" parameterType="int"> delete from people where id = #{0} </delete> ----------------------------------------------- int del = session.delete("a.b.del",3); if(del>0){ System.out.println("成功"); }else{ System.out.println("失败"); } session.commit();
     我整理了一份文章相关知识点的资料总结 零基础到架构的都有哦! 如果需要获取到这个【核心知识点整理】文档的话帮忙转发一下然后再关注我私信回复“资料”得到免费获取方式吧! (资料的相关图片过多,就不一一放出来了,想要的朋友加关注帮小编点赞转发文章并私聊我呀!)

    这一文让你掌握JAVA_EE_MyBatis学习&开发流程_https://bianchenghao6.com/blog_Java_第4张

    这一文让你掌握JAVA_EE_MyBatis学习&开发流程_https://bianchenghao6.com/blog_Java_第5张

    这一文让你掌握JAVA_EE_MyBatis学习&开发流程_https://bianchenghao6.com/blog_Java_第6张

    这一文让你掌握JAVA_EE_MyBatis学习&开发流程_https://bianchenghao6.com/blog_Java_第7张

    今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

    发表回复