• Mybatis学习——Mybatis入门程序


    MyBatis入门程序

    一.查询用户

    1.使用客户编号查询用户

      (1).创建一个数据表

    USE spring;
    
    #创建一个名为t_customer的表
    CREATE TABLE t_customer(
        id INT(32) PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(50),
        jobs VARCHAR(50),
        phone VARCHAR(16)
    );
    
    #插入3条数据
    INSERT INTO t_customer VALUES('1','joy','doctor','13745874578');
    INSERT INTO t_customer VALUES('2','jack','teacher','12745874578');
    INSERT INTO t_customer VALUES('3','tom','worker','14745874578');

      (2)创建一个web项目,将Mybatis核心包放入,如图

          

       (3)在src目录下创建一个com.itheima.po包,在该包下创建持久化类Customer,

    package com.itheima.po;
    /**
     * 客户持久化类
     * @author 12428
     *
     */
    
    import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;
    
    public class Customer {
        private  Integer id;
        private String username;
        private String jobs;
        private String phone;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getJobs() {
            return jobs;
        }
        public void setJobs(String jobs) {
            this.jobs = jobs;
        }
        public String getPhone() {
            return phone;
        }
        public void setPhone(String phone) {
            this.phone = phone;
        }
        @Override
        public String toString() {
            return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]";
        }
        
    }

      (4)在src目录下,创建一个com.itheima.mapper的包,并在包中创建映射文件CustomerMapper.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的位置-->
    <mapper namespace="com.itheima.mapper.CustomerMapper">
        <!-- 根据客户编号来获取客户信息 -->
        <select id="findCustomerById" parameterType="Integer"
                resultType="com.itheima.po.Customer">
            select * from t_customer where id=#{id}
        </select>
    </mapper>

      <mapper>元素是配置文件的根元素,它包含了一个namespace属性,该属性为<mapper>元素指定了唯一的命名空间,通常会设置为“包名+SQL映射文件名”的形式,其中<select>元素中的信息是用于执行查询操作的配置,其中ID属性是<select>在配置文件中的唯一标识。parameterType是指定参数类型,resultType是指定查询返回查询结果的类型。在定义的Sql语句中#{id}是用于表示一个占位符

      (5)在src的目录下,创建Mybatis的核心配置文件mybatis-config.xml,给配置文件中 的两个步骤:(1)配置环境;(2)配置Mapper.xml的位置

    <?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>
        <!--1. 配置环境 -->
        <environments default="mysql">
            <!-- 配置id为mysql的数据库环境 -->
            <environment id="mysql">
                <!-- 使用JDBC的事务管理 -->
                <transactionManager type="JDBC"/>
                
                <!-- 数据库连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
                    <property name="username" value="root"/>
                    <property name="password" value="abc"/>
                </dataSource>
            </environment>
        
        </environments>
        
        <!-- 配置Mapper的位置 -->
        <mappers>
            <mapper resource="com/itheima/mapper/CustomerMapper.xml"/>    
        </mappers>
    </configuration>

      (6).在src目录下,创建一个com.itheima.test包,在该包下创建一个测试类,并编写测试方法

    package com.itheima.test;
    
    import java.io.InputStream;
    
    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.itheima.po.Customer;
    
    /**
     * MyBatis的测试类
     * @author 12428
     *
     */
    public class MyBatisTest {
        
        /**
         * 根据客户编号查询信息
         * @throws Exception
         */
        @Test
        public void findCustomerByIdTest()throws Exception{
            //1.读取配置文件
            String resource ="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            //2.根据配置文件来构建SqlSessionFactory会话工厂实例
            SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //3.通过会话工厂实例创建会话对象
            SqlSession sqlSession=sessionFactory.openSession();
            //4.通过sqlSession实例来执行方法
            Customer customer=sqlSession.selectOne("com.itheima.mapper.CustomerMapper.findCustomerById",1);
            //5.打印输出结果
            System.out.println(customer.toString());
            //6.关闭资源
            sqlSession.close();
        }
    }

      (7)测试结果

           

    2.使用客户名模糊查询用户信息

      (1)在映射文件CustomerMapper.xml中,添加根据客户模糊查询客户信息列表的Sql语句,具体代码如下

    <!-- 根据客户名模糊查询客户的信息 -->
        <select id="findCustomerByName" parameterType="String" resultType="com.itheima.po.Customer">
            select * from t_customer where username like '%${value}%'
        </select>

      在使用“${}”进行SQL字符串拼接时,是无法防止SQL语句注入问题,如果想要实现模糊查询,又要防止SQL语句,可以对上述中的sql语句中的  '%${value}%'  改为concat()函数进行字符串拼接,如下

    select * from t_customer where username like concat('%',#{value},'%')

      (2)在测试类中添加查询的代码

    /**
         * 模糊查询用户的信息
         */
        @Test
        public void findCustomerByNameTest()throws Exception{
            //1.读取配置文件
            String resource ="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            //2.根据配置文件来构建SqlsessionFactory
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //3.根据工厂来创建会话对象
            SqlSession sqlSession= sqlSessionFactory.openSession();
            //4.执行查询方法
            List<Customer> customers=sqlSession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByName", 'j');
            //5.输出结果集
            for(Customer customer:customers) {
                System.out.println(customer);
            }
            //6.关闭SqlSession
            sqlSession.close();

       (3)查询结果

     二.添加客户

    在MyBatis中由一个约定:

      在形式上,无论输出参数和输入参数,都只能有一个,如果输入的参数是多种类型的,可以使用数组或者对象。

      如果输入参数是简单类型(8个基本类型+String)是可以使用任何占位符的,#{xxx},如果是对象类型,则必须是对象的属性,#{属性名}

    1.添加客户

      (1)在配置文件customerMapper.xml中添加如下内容

    <!-- 添加用户 -->
        <insert id="addCustomer" parameterType="com.itheima.po.Customer">
            insert into t_Customer(username,jobs,phone)
            values(#{username},#{jobs},#{phone})
        </insert>

      (2)在测试类中添加addCustomer方法

    /**
         * 添加客户
         */
        @Test
        public void addCustomer() throws Exception{
            //1.读取配置文件
            String resource="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //2.通过SqlSession对象
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //3.执行添加操作
            //3.1创建一个Customer对象
            Customer customer=new Customer();
            customer.setUsername("rose");
            customer.setJobs("student");
            customer.setPhone("11111111");
            //3.2执行sqlSession的添加操作
            int num=sqlSession.insert("com.itheima.mapper.CustomerMapper.addCustomer", customer);
            //3.3通过查询结果来判断是否插入成功
            if(num>0) {
                System.out.println("您成功插入了"+num+"条数据");
            }else {
                System.out.println("插入失败!");
            }
            //3.4提交事务
            sqlSession.commit();
            //4.关闭sqlSession
            sqlSession.close();
        }

      注意:如果是增删改,是需要提交事务的,不然是不会生效的。

    三.修改用户,删除用户

      (1).在配置文件中添加如下代码:

      <!-- 更新客户 -->
        <update id="updateCustomer" parameterType="com.itheima.po.Customer" >
            update t_customer set
            username=#{username},jobs=#{jobs},phone=#{phone} where id=#{id}
        </update>
        <!-- 删除用户 -->
        <delete id="deleteCustomer" parameterType="Integer">
            delete from t_customer where id=#{id}
        </delete>

      (2)在测试类中添加如下代码

    /**
         * 更新客户
         */
        
        @Test
        public void updateCustomerTest() throws Exception{
            //1.读取配置文件
            String resource ="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            //2.获取会话工厂对象
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //3.创建会话对象
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //4.执行会话对象的方法
            Customer customer=new Customer();
            customer.setId(1);
            customer.setUsername("zhaoli");
            customer.setJobs("teacher");
            customer.setPhone("111111");
            int num=sqlSession.update("com.itheima.mapper.CustomerMapper.updateCustomer", customer);
            //5.输出结果,根据返回的结果来判断
            if(num>0) {
                System.out.println("修改成功!");
            }else {
                System.out.println("修改失败!");
            }
            //6.提交事务
            sqlSession.commit();
            //7.关闭sqlSession对象
            sqlSession.close();
        }
        
        /**
         * 删除用户
         */
        @Test
        public void deleteCustomer()throws Exception{
            //1.读取配置文件
            String resource ="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            //2.获取会话工厂对象
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //3.创建会话对象
            SqlSession sqlSession=sqlSessionFactory.openSession();
            
            //4.执行方法
            int num=sqlSession.delete("com.itheima.mapper.CustomerMapper.deleteCustomer", 1);
            //5.返回结果
            if(num>0) {
                System.out.println("删除成功!");
            }else {
                System.out.println("删除失败!");
            }
            //6.提交事务
            sqlSession.commit();
            //7.关闭sqlSession对象
            sqlSession.close();
        }
  • 相关阅读:
    oracle中统计邮箱的总类
    java中形参的值传递
    There is no Action mapped for action name的解决方法
    java操作excel
    验证邮箱地址是否真实有效
    Tomcat服务器内外网通过IP地址都不能访问
    HashMap遍历的两种方式(转)
    用java实现栈
    oracle中利用merge语句防止重复插入
    sshkeyken 中文手册
  • 原文地址:https://www.cnblogs.com/zhilili/p/11580516.html
Copyright © 2020-2023  润新知