• MyBatis的基本使用


    MyBatis概述: 

      MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    MyBatis和Hibernate的比较

    MyBatis:

      1、MyBatis是一个半自动的ORM框架,必须写SQL语句。

      2、事务处理,缓存都支持。

    Hibernate:

      1、Hibernate是一个全自动ORM框架,可以不写SQL语句

      2、事务处理,缓存都支持,二级缓存比MyBatis更好。

    配置文件的类:

      Properties(属性)、Settings(全局参数设置)、typeAliases(类型别名)、typeHandlers(类型处理器)、objectFactory(对象工厂)

      plugins(插件)、environments(环境信息集合)、environment(单个环境信息)、transactionManager(事物)、dataSource(数据源)、mappers(映射器)

    映射器的主要元素

      映射器是由Java接口和XML文件(或注解)共同组成的,Java接口主要定义调用者接口,XML文件是配置映射器的核心文件,包括以下元素:

      1、select 查询语句,可以自定义参数,返回结果集;

      2、insert 插入语句,返回一个整数,表示插入的条数;

      3、update 更新语句,返回一个整数,表示更新的条数;

      4、delete 删除语句,返回一个整数,表示删除的条数;

      5、sql 允许定义一部分SQL,然后再各个地方引用;

      6、resultMap 用来描述从数据库结果集中来加载对象,还可以配置关联关系;

      7、cache 给定命名空间的缓存配置;

    示例如下:

      1.创建全局配置文件:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.qcc</groupId>
      <artifactId>mybatis01</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <dependencies>
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.6</version>
      </dependency>
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.47</version>
      </dependency>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
      </dependency>
      </dependencies>
    </project>

      2.定义User对象:

    package com.qcc.demo;
    
    public class User {
        private Integer id;
        private String name;
        private Integer age;
        
        public User() {
            super();
        }
    
        public User(Integer id, String name, Integer age) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
        }
        
    }

      3.创建映射文件

    <?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 名称空间:作用是用来区分各个xml映射文件的 -->
    <mapper namespace="com.qcc.demo.User">
        <select id="query" resultType="com.qcc.demo.User">
            select * from t_user 
        </select>
        <insert id="addUser" parameterType="com.qcc.demo.User">
            insert into t_user(name,age)values(#{name},#{age})
        </insert>
        
        <update id="updateUser" parameterType="com.qcc.demo.User">
            update t_user set name=#{name}  , age = #{age}  where id = #{id}
        </update>
        
        <delete id="deleteById" >
            <!-- 在传达的数据是单个是情况下吗,取值的key可以自定义 -->
            delete from t_user where id = #{id}
        </delete>
        
        <select id="queryById" resultType="com.qcc.demo.User">
            select * from t_user where id = #{ids}
        </select>
    </mapper>

      4.创建主配置文件,并把映射文件配置到主配置文件中

    <?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>
     
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/sys?characterEncoding=utf-8"/>
            <property name="username" value="root"/>
            <property name="password" value="1234"/>
          </dataSource>
        </environment>
      </environments>
     <mappers>
         <!-- 关联映射文件,配置映射文件 -->
        <mapper resource="com/qcc/demo/UserMapper.xml"/>
      </mappers>
    </configuration>

      5.测试增、删、查、改操作:

    package mybatis01;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import com.qcc.demo.User;
    
    /**
     * mybatis的使用步骤
     *    1.导入mybatis和mysql的jar包
     *    2.添加mybatis的全局配置文件(设置数据库连接信息和关联映射文件)
     *    3.创建对应的映射文件(写sql语句)和pojo类
     * @throws IOException 
     */
    public class MybaisTest {
        @Test
        public void query() throws Exception {
            //去加载全局配置文,去各种类加载器路径下获取配置文件
            InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
            
            // 2.获取SqlSessionFactory对象 
            //具体功能:解析了全局配置文件和映射文件并将结果保存在了Configuration中
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            //获取SqlSession对象
            SqlSession session = factory.openSession();
            //执行数据库操作
            List<User> list = session.selectList("com.qcc.demo.User.query");
            for (User user : list) {
                System.out.println(user);
            }
            session.close();
        }
        
        @Test
        public void queryById()throws IOException{
            InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            SqlSession session = factory.openSession();
            List<User> list = session.selectList("com.qcc.demo.User.queryById", 1);
            for (User user : list) {
                System.out.println(user);
            }
            session.close();
        }
        
        @Test
        public void addUser()throws IOException{
            InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            // 自动提交默认是关闭的
            SqlSession session = factory.openSession();
            User user = new User();
            user.setName("cc");
            user.setAge(22);
            int count = session.insert("com.qcc.demo.User.addUser", user);
            session.commit();
            System.out.println("增加的行数:"+count);
            session.close();
        }
        
        @Test
        public void updateUser()throws IOException{
            InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            // 自动提交默认是关闭的
            SqlSession session = factory.openSession();
            User user = new User();
            user.setId(3);
            user.setName("马大哈");
            user.setAge(27);
            int count = session.insert("com.qcc.demo.User.updateUser", user);
            session.commit();
            System.out.println("修改的行数:"+count);
            session.close();
        }
        
        @Test
        public void deleteUser()throws IOException{
            InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            // 自动提交默认是关闭的
            SqlSession session = factory.openSession();
            
            int count = session.insert("com.qcc.demo.User.deleteById", 4);
            session.commit();
            System.out.println("删除的行数:"+count);
            session.close();
        }
    }
  • 相关阅读:
    SpringCloud Zipkin快速开始
    Spring-Cloud-Gateway Predicate谓词(断言)使用与自定义
    Gateway Redis令牌桶请求限流过滤器
    SpringBoot集成logback日志组件
    Java使用Aspose-Words实现Word转换Pdf
    JAVA通过Map拼接SQL语句(Insert Update语句)
    使用Java反射机制将Bean对象转换成Map(驼峰命名方式 — 下划线命名方式)
    mybatis执行原生sql
    windows环境下elasticsearch安装教程(超详细)
    购物车的原理及Java实现(仿京东实现原理)
  • 原文地址:https://www.cnblogs.com/qinchangchuan/p/11173032.html
Copyright © 2020-2023  润新知