zoukankan      html  css  js  c++  java
  • 04-增删改查

    一、代码

    1.接口代码

    package com.MyBatis01.dao;
    
    import com.MyBatis01.domain.User;
    
    import java.util.List;
    
    /**
     * 用户持久层接口
     */
    public interface IUserDao
    {
        /**
         * 查询所有操作
         * @return
         */
        List<User> findAll();
    
        /**
         * 保存操作
         * @param user
         */
        void saveUser(User user);
    
        /**
         * 更新用户
         * @param user
         */
        void updateUser(User user);
    
        /**
         * 删除用户
         * @param userId
         */
        void deleteUser(Integer userId);
    
        User findById(int userId);
    
        /**
         * 根据名称,模糊查询
         * @param username
         * @return
         */
        List<User> findByName(String username);
    
        /**
         * 查询总用户数目
         * @return
         */
        int findTotal();
    }
    
    

    2. 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">
    
    <mapper namespace="com.MyBatis01.dao.IUserDao">
        <!--配置查询所有 id不可随便写,要写dao的方法名称,resultType返回的类型-->
        <select id="findAll" resultType="com.MyBatis01.domain.User">
            select *from user;
        </select>
    
        <!--插入操作-->
        <insert id="saveUser" parameterType="com.MyBatis01.domain.User">
            <!-- 配置插入操作后,获取插入数据的 id -->
            <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
                select last_insert_id();
            </selectKey>
            insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
        </insert>
    
        <!--更新用户-->
        <update id="updateUser" parameterType="com.MyBatis01.domain.User">
            update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id};
        </update>
    
        <!--删除用户-->
        <delete id="deleteUser" parameterType="java.lang.Integer">
            /*当参数只有一个时,可以为任何字母代表*/
            delete from user where id=#{any};
        </delete>
        
        <select id="findById" parameterType="java.lang.Integer" resultType="com.MyBatis01.domain.User">
            select *from user where id=#{userId};
        </select>
    
        <!--根据名称模糊查询-->
        <select id="findByName" parameterType="String" resultType="com.MyBatis01.domain.User">
            select *from user where username like #{name}
        </select>
    
        <!--查询总用户数目-->
        <select id="findTotal" resultType="java.lang.Integer">
            select count(id) from user;
        </select>
    </mapper>
    
    

    3.测试类代码

    package com.MyBatis01.test;
    
    import com.MyBatis01.dao.IUserDao;
    import com.MyBatis01.domain.User;
    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.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
    
    public class MyBatisTest
    {
        //region 初始化操作
        private InputStream in=null;
        private SqlSession sqlSession=null;
        private IUserDao userDao;
    
    
    
        @Before //用于在测试方法之前执行
        public void init(){
            try
            {
                //        1.读取配置文件
                in=Resources.getResourceAsStream("SqlMapConfig.xml");
    
                SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
                SqlSessionFactory factory=builder.build(in);
    
                sqlSession=factory.openSession();
    
                userDao=sqlSession.getMapper(IUserDao.class);
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    
        @After //用于在测试方法之后执行
        public void destroy(){
            try
            {
                //提交事务
                sqlSession.commit();
                sqlSession.close();
                in.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    
        //endregion
    
        /**
         * 查看所有
         */
        @Test
        public void testSelect()
        {
    
            List<User> users=userDao.findAll();
            for (User user:users){
                System.out.println(user);
            }
            System.out.println("查询所有");
        }
    
        /**
         * 插入
         */
        @Test
        public void testInsert(){
            User user=new User();
            user.setUsername("泰坦之光");
            user.setAddress("泰坦星");
            user.setSex('男');
            user.setBirthday(new Date());
    
    //        保存之前与保存之后 id 的不同,看 xml 配置文件
            System.out.println("保存操作之前"+user);
            userDao.saveUser(user);
    
            System.out.println("保存操作之后"+user);
    
        }
    
        /**
         * 修改
         */
        @Test
        public void testUpdate(){
            User user=new User();
            user.setId(12);
            user.setUsername("信守斩龙-醉人");
            user.setAddress("龙之谷");
            user.setSex('男');
            user.setBirthday(new Date());
    
            userDao.updateUser(user);
        }
    
        /**
         * 删除
         */
        @Test
        public void testDelete(){
            userDao.deleteUser(111);
            System.out.println("删除成功");
        }
    
        /**
         * 根据 id 查询用户
         */
        @Test
        public void testFindById(){
            User user=userDao.findById(12);
            System.out.println(user);
        }
    
        /**
         * 模糊查询
         */
        @Test
        public void testFindByName(){
    //        模糊查询需要 % 所以要自己添加
            List<User> users=userDao.findByName("%龙%");
            for (User user:users){
                System.out.println(user);
            }
        }
    
        /**
         * 查询总记录条数
         */
        @Test
        public void testFindTotal(){
            Integer userTotal=userDao.findTotal();
            System.out.println("总人口数目为:"+userTotal);
        }
    }
    
    

    二、parameterType(输入类型)

    1.传递简单类型

    2.传递 pojo 对象

    MyBatis 使用 ognl 表达式解析对象字段的值,#{}或者${}括号中的值为 pojo 属性名称

    OGNL表达式:

    Object Graphic Navigation Language

    它是通过对象的取值方法来获取数据,在写法上把 get 给省略了

    比如:我们获取用户的名称

    ​ 类中写法:user.getUsername();

    ​ OGNL表达式写法:user.username

    mybatis 中为什么能直接写 username,而不用 user. 呢?

    ​ 因为在 parameterType 中已经提供了属性所属的类,所以此时不需要写对象名

    3.传递 pojo 包装对象

    开发中通过 pojo 传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件还包括其他的查询条件(比如将用户购买商品信息也作为查询条件),这是可以使用包装对象传递输入参数。

    pojo 类中包含 pojo

    需求:根据用户名查询用户信息,查询条件放到 QueryVo 的 user 属性中

    三、假如数据库列明与实体类的名字对不上号

    1. 在 IUserDao 查询语句中改为

      1. select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday
    2. 配置 查询结果的列明和实体类的属性名的对应关系

        <!--配置 查询结果的列明和实体类的属性名的对应关系-->
        <resultMap id="userMap" type="com.MyBatis01.domain.User">
            <!--主键字段的对应-->
            <id property="id" column="id"></id>
    
            <!--左边位实体类的属性名,右边为数据库的列名-->
            <!--非主键字段的对应-->
            <result property="username" column="username"></result>
            <result property="birthday" column="birthday"></result>
            <result property="sex" column="sex"></result>
            <result property="address" column="address"></result>
    
        </resultMap>
    
        <!--配置查询所有 id不可随便写,要写dao的方法名称,resultType返回的类型-->
        <select id="findAll" resultMap="userMap">
            select *from user;
        </select>
    
  • 相关阅读:
    HTML <input> 标签的 maxlength 属性
    HTTP 方法:GET 对比 POST
    怎么在html页面和js里判断是否是IE浏览器
    一行神奇的javascript代码
    c# 数据库批量插入数据SqlBulkCopy 示例
    c# 多线程调用窗体上的控件 示例
    sqlserver查找使用了某个字段的所有存储过程
    SQL Server 数据库性能优化
    SQL语句的执行过程
    Sql Server- 性能优化辅助指标SET STATISTICS TIME ON和SET STATISTICS IO ON
  • 原文地址:https://www.cnblogs.com/zuiren/p/11406103.html
Copyright © 2011-2022 走看看