• mybatis中插入数据(id为主键的情况)以及查询数据


    1. 上篇写的插入是表中没有设定主键,因此可以直接传入数据完成插入操作。当表中将字段id设为主键并自动增加的情况下该如何插入数据并没有说明。下面还是以mysql为例进行说明:
      • 插入操作,在上篇的基础上,把写的userDataDaoImp.xml略作修改即可:
      • 1)采用useGeneratedKeys=“true” keyProperty=”id”(id是主键的字段名称)来指定插入的数据所对应的id是自动生成的,代码如下.
    <!--  这里是用useGeneratedKeys=“true"  keyProperty="id"(id是主键的字段名称)来指定,插入的id的值是自动生成的主键;-->
    <insert id="insert_userData" parameterType="userData" useGeneratedKeys="true" keyProperty="id" >
            insert into mytest(name) values(#{name})
    </insert>
     *  2) 采用selectKey指定主键id的值,代码如下:
    
    <insert id="insert_userData" parameterType="userData" >
            <!-- 这里使用selectKey来获取主键值 -->
            <!--  keyProperty="id"这里写的是对应的主键的字段名称,resultType="int"这里对应的是主键的类型-->
            <selectKey keyProperty="id" resultType="int">
                select LAST_INSERT_ID()
            </selectKey>
            insert into mytest(name) values(#{name})
        </insert>

    以上两种方法都可以实现,只需将上篇中的对应部分替换掉即可。
    userDataDaoImp.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">
    <!--等价于dao接口的实现 namespace必须和接口的类路径一样 -->
    <mapper namespace="userDataDao">
        <!--  这里是用useGeneratedKeys=“true"  keyProperty="id"(id是主键的字段名称)来指定,插入的id的值是自动生成的主键;
        <insert id="insert_userData" parameterType="userData" useGeneratedKeys="true" keyProperty="id" >
            insert into mytest(name) values(#{name})
        </insert>
        -->
        <insert id="insert_userData" parameterType="userData" >
            <!-- 这里使用selectKey来获取主键值 -->
            <!--  keyProperty="id"这里写的是对应的主键的字段名称,resultType="int"这里对应的是主键的类型-->
            <selectKey keyProperty="id" resultType="int">
                select LAST_INSERT_ID()
            </selectKey>
            insert into mytest(name) values(#{name})
        </insert>
    
    </mapper>

    下面简单记录一下查询select操作:

    1. 还是在上篇的基础上进行修改
      • 1.在userDataDao中新添加查询方法

    这里写图片描述

    • 2.在userDataDaoImp.xml中写查询语句
      • resultType指定返回值类型,要写全类名。 parameterTyp指定传入的参数类型,where id=#{id}中是
        #{方法中的参数名}
        这里写图片描述
    • 3.在test_userDataDao中添加java语句进行查询
      这里写图片描述

    userData中也要添加toString方法;
    查询结果如下:
    这里写图片描述

    userDataDao代码:

    /**
     *@author xpengfei
     *@creat  4:27:28 PM   May 25, 2017
     */
    public interface userDataDao {
        //插入方法
        public void insert_userData(userData userdata);
    
        //查询方法
        public userData query_by_id_Re_All(int id);
    
    }
    

    userDataDaoImp.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">
    <!--等价于dao接口的实现 namespace必须和接口的类路径一样 -->
    <mapper namespace="userDataDao">
        <!--  这里是用useGeneratedKeys=“true"  keyProperty="id"(id是主键的字段名称)来指定,插入的id的值是自动生成的主键;
        <insert id="insert_userData" parameterType="userData" useGeneratedKeys="true" keyProperty="id" >
            insert into mytest(name) values(#{name})
        </insert>
        -->
        <insert id="insert_userData" parameterType="userData" >
            <!-- 这里使用selectKey来获取主键值 -->
            <!--  keyProperty="id"这里写的是对应的主键的字段名称,resultType="int"这里对应的是主键的类型-->
            <selectKey keyProperty="id" resultType="int">
                select LAST_INSERT_ID()
            </selectKey>
            insert into mytest(name) values(#{name})
        </insert>
        <!-- resultType指定返回值类型,要写全类名。 parameterTyp指定传入的参数类型,where id=#{id}中是
                #{方法中的参数名}-->
        <select id="query_by_id_Re_All" parameterType="java.lang.Integer" resultType="userData">
            select * from mytest where id=#{id}
        </select>
    
    </mapper>

    test_userDataDao代码:

    import java.io.Reader;
    import java.util.Date;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    /**
     * @author xpengfei
     * @creat 4:42:30 PM May 25, 2017
     */
    public class test_userDataDao {
        public static void main(String[] args) throws Exception {
            // 得到SQLSession
    
            // 加载mybatis配置文件启动
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            // 读取mybatis的配置文件
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            // 负责构造SQLSession
            SqlSessionFactory factory = builder.build(reader);
            // 一次数据库会话,包含多次数据库访问操作,相当于JDBC中的Connection
            SqlSession session = factory.openSession();
            // 得到DAO的实现类
            userDataDao dao = session.getMapper(userDataDao.class);
    
            // 调用insert方法完成插入操作
            /*userData user_data = new userData("xpeng");
            System.out.println(user_data);
            dao.insert_userData(user_data);
            System.out.println("dhkjahkdjaksndlasndlskand--------------");
    
            session.commit();
             */
            userData result=dao.query_by_id_Re_All(8);
            System.out.println(result);
            session.close();
    
        }
    
    }
    
    • update方法:
      userDataDaoImp.xml中写标签
    <update id="方法名"  parameterType="参数类型,如果是对象,要写对象所在类的全类名">
     update 表名 set 表中字段名=#{参数名或对象中包含的与表中字段一致的变量的名称}  where 字段名=#{更新所依据的参数eg:id}
    
    </update>
    • delete方法:
      userDataDaoImp.xml中写标签
    <delete id="方法名"  parameterType="参数类型,如果是对象,要写对象所在类的全类名">
     delete  from 表名 where 字段名=#{删除所依据的参数eg:id}
    
    </delete>

    增、删、改操作一定要有commit,查询则不需要;

    这里可以对读取mybatis配置文件的代码进行封装,以免反复去写使代码冗余;

    编写mybatisUtil工具类对上述进行封装:

    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    /**
     * @author xpengfei
     * @creat 6:09:46 PM May 26, 2017
     */
    public class mybatisUtil {
        private static SqlSessionFactory factory=null;
        static {
            try {
                // 加载mybatis配置文件启动
                SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
                // 读取mybatis的配置文件
                Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
                // 负责构造SQLSession
                factory = builder.build(reader);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static SqlSession getSession() {
            SqlSession session = factory.openSession();
            return session;
        }
    
        public static void close(SqlSession session) {
            if (session != null)
                session.close();
        }
    }
    
  • 相关阅读:
    暑假团队学习第一周
    Python快速入门(3)
    Python快速入门(2)
    走入PHP-类与对象
    走入PHP-declare、ticks、encoding、include
    走入PHP-变量、运算符
    XAMPP安装报错及解决
    走入PHP-数据类型和字符串语法
    走入PHP-初次见面
    剑指offer-替换空格
  • 原文地址:https://www.cnblogs.com/xpfei/p/7450806.html
Copyright © 2020-2023  润新知