JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

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

wys521 2024-11-24 22:47:20 精选教程 20 ℃ 0 评论


猿灯塔   全文略长  希望对各位有帮助!

另外!文末有令你们心动的白嫖惊喜哦!

想要的朋友关注一下小编、转发文章并私聊我哦!

Mybais简介:

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

一、MVC开发模式

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

二、项目之间的数据通信

  • 项目之间如果想使用类,则在该项目下右键export,选择如下界面,选择JAR file。
  • 填写路径保存,然后将生成的jar文件copy到你想调用该包里的类的路径下,然后build path,即可在该工程下使用该包里面的类。
  • 三、环境搭建

    1、导入jar包

    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();
     我整理了一份文章相关知识点的资料总结
    
      零基础到架构的都有哦!
    
      如果需要获取到这个【核心知识点整理】文档的话帮忙转发一下然后再关注我私信回复“资料”得到免费获取方式吧!
    
    (资料的相关图片过多,就不一一放出来了,想要的朋友加关注帮小编点赞转发文章并私聊我呀!)





    Tags:

    本文暂时没有评论,来添加一个吧(●'◡'●)

    欢迎 发表评论:

    最近发表
    标签列表