您的位置:首页 > 其它

MyBatis增删改查

2016-07-24 13:41 302 查看
   如下文章若有误请指出,谢谢。

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

   增删改查

     上一篇文章我们简单的介绍了下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的增删改查就结束了,如果文章中有出错,请指出,谢谢。

        

        

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: