zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    
  • 相关阅读:
    ASP.NET 表单验证 Part.1(理解表单验证)
    Silverlight 简介 Part.3(设计 Siverlight 页面)
    ASP.NET 成员资格 Part.3(LoginStatus、LoginView、PasswordRecovery)
    ASP.NET 网站部署 Part.1(安装IIS、复制文件部署网站)
    ASP.NET Dynamic Data Part.1(创建动态数据应用程序)
    ASP.NET 安全模型 Part.2(SSL)
    ASP.NET MVC Part.2(扩展基本的 MVC 应用程序)
    ASP.NET 网站部署 Part.2(使用 Web 部署)
    开发高级 Web 部件
    创建 Web 部件(WebPart 类、简单的 Web 部件)
  • 原文地址:https://www.cnblogs.com/xpfei/p/7450806.html
Copyright © 2011-2022 走看看