MyBatis增删改查

   如下文章若有误请指出,谢谢。

    老规矩,先看下本篇文章所讲内容

   增删改查

     上一篇文章我们简单的介绍了下MyBatis,这一篇文章我们继续学习MyBatis。

      数据库最基本的操作就是增删改查了,接下来让我们一起学习在MyBatis如何对数据库进行增删改查操作,首先看下如何往数据库中添加一条数据。

     1、insert

     我们在上一篇文章中有介绍到在使用MyBatis框架时我们要写一个基本配置文件和一个Map配置文件,  不清楚的同学可以先去看下上一篇文章<初识MyBatis>,其中我们都是把SQL语句写在Map配置文件里,下面我们一起来看下Map配置文件中往数据库添加数据的SQL语句

   

<mapper namespace="/">
 <!-- 增 -->
  <insert id="insertUser" parameterType="jkuser" statementType="PREPARED"
      keyProperty="id" useGeneratedKeys="true">
      insert into jkuser(username , password) values (#{username},#{password})
  </insert>
</mapper>
    我们来 看一下这条SQL语句,在insert标记中我们可以看到一个id=“insertUser”,这个id是我们待会在Java代码中操作时,用来告诉代码在哪执行相关的SQL语句, statementType 是表示预处理的SQL语句,它有三种方式分别为:STATEMENT,PREPARED或CALLABLE的一种,MyBatis默认方式:PREPARED。keyProperty代表的哪一个主键,我们数据库当中选择id作为主键,usGeneratedKeys表示应用JDBC或数据库的自增机制来完主键设定。insert语句中的#{username}代表一个参数,参数名称叫username,类似我们在JDBC操作PreparedStatement中的(?)。parameterType表示 将会传入这条语句的参数类的完全限定名或别名,我这里使用的是一个别名(jkuser),我们来看下如何声明一个别名:

  <!-- 定义别名 ,定义在environments之前 -->
  <typeAliases> 
      <!-- alias是定义别名的名称   type是原名-->
     <typeAlias  alias="jkuser" type="jike.book.pojo.jkuser"/>
  </typeAliases>
        我们在基本配置文件里通过typeAliases标记来为一些类定义别名,我们看以上的代码,其中 type是我们的类的文档所在位置,也就是包名+类名,然后alias是我们自己定义的别名,方便我们操作。上面不是提到了 parameterType表示  将会传入这条语句的参数类的完全限定名或别名,别名我们已经知道如何去定义了,然后完全限定名其实就是我们在定义别名时的“jike.book.pojo.jkuser”,通常我们都会事先定义别名,来方面我们后面的操作。声明别名时得注意下,在基本配置文件里定义别名时,要把定义别名写在environments标记之前否则会报org.xml.sax.SAXParseException异常 

    SQL语句已经有了,接下来我们看下如何在Java代码里操作

    String resourc="jk/book/map/MyBatisConfig.xml";
    Reader reader=null;
    SqlSession session=null;
    try {
	   reader=Resources.getResourceAsReader(resourc);
<pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 26px;">           SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
           session=factory.openSession();
<pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 26px;">           jkuser user=new jkuser();
    	   ser.setUsername("张一");
           user.setPassword("123");
    	   session.insert("insertUser", user);
    	   session.commit(); 

 } catch (IOException e) { e.printStackTrace();}finally { session.close(); } 
        从代码里我们可以知道通过SqlSession对象执行insert方法,其中insert参数1就是我们刚才在Map配置文件里定义的id=“inseryUser”,参数2就是我们定义的parameterType="jkuser“,这里我们传入参数类型是是数据库的映射类,这个类里set了我们要插入数据库的用户名和密码,最后别忘了要关闭SqlSession。 

      2、delete

       大家如果之前有了解了数据库的基本操作,通过上面讲的insert操作之后,应该知道其它的删、改也是类似的操作,只要在Map配置文件里添加相应的SQL语句,然后在代码中通过SqlSession操作,下面直接贴出代码

<delete id="deleteUser" parameterType="jkuser">
      delete from jkuser where id=#{id}
  </delete>
   这里我们通过指定id进行删除。

        session=factory.openSession();
    	jkuser user=new jkuser();
   	user.setId(1);
   	session.delete("deleteUser", user);
   	session.commit();
	session.close();
   我们在Java代码中通过给映射类set一个id,这个id就是我们在Sql语句里指定删除的id。

      3、update

 <update id="updateUser" parameterType="jkuser">
      update jkuser set username=#{username,jdbcType=VARCHAR},password=#{password} where id=#{id}
  </update>
   
     session=factory.openSession();
      jkuser user=new jkuser();
      user.setId(1);
      user.setUsername("张二");
      user.setPassword("12");
      session.update("updateUser",user);
      session.commit();
      session.close();
        4、select(resultType方式)

        (1) 查询单条

<select id="loginSelect" resultType="jkuser" parameterType="hashmap">
       select * from jkuser where username=#{username} and password=#{password}
   </select>
       resultType 表示从这条语句中返回的期望类型的类的完全限定名或别名,这里我利用别名。parameterType表示将会传入这条语句的参数类型是一个HashMap集合。

       session=factory.openSession();
    	HashMap< String, String> map=new HashMap<>();
    	map.put("username", "张四");
    	map.put("password", "123");
    	jkuser user=session.selectOne("loginSelect", map);
    这里我们可以看到查询返回的类型是一个对象。

      (2)查询多条

 <select id="selectList" resultType="jkuser">
       select * from jkuser
   </select>
        java代码
List<jkuser> list=session.selectList("selsectList");
        我们可以看到和上面的单条查询不一样,单条查询我们是调用SelectOne,多条查询我们调用的selectList,返回的是一个集合。

    5、select(resultMap方式)

<span style="font-size:14px;"><resultMap type="jkuser" id="rMap">
       <id property="id" column="id" />
       <result property="username" column="username"/>
       <result property="password" column="password"/>
   </resultMap>
   <select id="selsectRMap" resultMap="rMap">
       select id ,username ,password from jkuser 
   </select></span>
      使用resultMap方式时,要指定关系,我们可以在resultMap标记中看到指定对象的属性名(property)与表的的列名(column)相互匹配。在select标记中我们可以看到我们使用的是resultMap返回查询结果的方式。

         在Java代码中

List<jkuser> list=session.selectList("selsectRMap");
         到这里我们MyBatis的增删改查就结束了,如果文章中有出错,请指出,谢谢。

        

        



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值