MyBatis之CRUD详解

一、MyBatis基础操作

(1)不带返回值添加、更新、删除

        不带返回值的添加、更新、删除非常的简单。

        user.xml中配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd
">
<mapper namespace="User">
 <insert id="add" parameterType="User">
  insert into t_user(username,password) values(#{username},#{password})
 </insert>
 
 <update id="updateById" parameterType="User">
  update t_user set username=#{username},password=#{password} where id=#{id}
 </update>

 <delete id="deleteById" parameterType="User">
  delete from t_user where id=#{id}
 </delete>

        UserDao.java中代码如下:

//打开连接
sqlSession=sqlSessionFactory.openSession(); 

  
//SQL操作开始 ——————————
//添加
sqlSession.insert("add", user);
//更新
sqlSession.update("User.updateById", user); 
//删除
sqlSession.delete("User.deleteById", id); 
//SQL操作结束
 
  
//提交数据库更新
sqlSession.commit();
//关闭连接
sqlSession.close();

        当user.xml中的id不重复时,可以直接通过id进行调用,如果出现重复,需要按照“namespace.id”的格式调用

(2)查询单条记录

        user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="User">
 <select id="getById" parameterType="User" resultType="User">
  select * from t_user where id=#{id} and 1=1
 </select>
</mapper>

        UserDao.java部分代码如下所示:

sqlSession=sqlSessionFactory.openSession();
//查询单条记录 
user=(User)sqlSession.selectOne("User.getById",id);
sqlSession.commit();
sqlSession.close();

(3)查询返回List集合

        user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"">
<mapper namespace="User">
    <select id="getAllUser" resultType="User">
      select * from t_user  
    </select> 
</mapper>

        UserDao.java部分代码如下所示:

List<User> users=null;
sqlSession=sqlSessionFactory.openSession();
//获取List集合 
users=sqlSession.selectList("User.getAllUser");
sqlSession.commit();
sqlSession.close();

        注意,这里的List的命名空间是java.util.List。

(4)查询返回自定义集合

        有时候,我们不希望返回所有的集合,而是返回我们需要的数据,这时候,就可以对返回的数据进行自定义。

        自定义返回的集合使用<resultMap>标签,如下所示:

<resultMap type="User" id="resultListUser">
  <id column="id" property="id" />
  <result column="username" property="username" />
  <result column="password" property="password" />
</resultMap>

        然后通过resultMap="resultListUser"指定返回自定义的数据集合。

        注意,resultMap和resultType不能同时存在。

        user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"">
<mapper namespace="User">
    <select id="getCustomAllUser" resultMap="resultListUser">
      select * from t_user
    </select>
    <resultMap type="User" id="resultListUser">
        <id column="id" property="id" />
        <result column="username" property="username" />
        <result column="password" property="password" />
    </resultMap> 
</mapper>

        UserDao.java部分代码如下所示:

List<User> users=null;
sqlSession=sqlSessionFactory.openSession();
users=sqlSession.selectList("User.getCustomAllUser");
sqlSession.commit();
sqlSession.close();

(5)插入后返回主键

        user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"">
<mapper namespace="User">
     <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="Id" parameterType="User">
      insert into t_user(username,password) values(#{username},#{password})
     </insert>
</mapper>

        在这里,useGeneratedKeys="true"表示使用主键自动生成,keyProperty="Id"表示主键的名称为“Id”。

        UserDao.java部分代码如下所示:

int id=0;
sqlSession=sqlSessionFactory.openSession();
//插入后返回主键 
sqlSession.insert("User.insertAndGetId", user);
sqlSession.commit();
sqlSession.close();
id= user.getId();

        友情提示:添加、更新、删除默认的返回值都是受影响的行数。

(6)聚合查询

        user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"">
<mapper namespace="User">
     <select id="countAll" parameterType="User" resultType="int">
          select count(*) from t_user
     </select>
</mapper>

        UserDao.java部分代码如下所示:

int count=0;
sqlSession=sqlSessionFactory.openSession();

//聚合查询 
count = Integer.parseInt(String.valueOf(sqlSession.selectOne("User.countAll")));
sqlSession.commit();
sqlSession.close();

(7)调用存储过程

        略。

(8)多个参数值问题

        在上面的例子中,我们曾经使用User实体来作为多个参数的传入载体。

        在Mybatis中,传递多个参数有两种方式:Map对象和Model实体。

        本例中,我们采用Map对象来演示:

        user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"">
<mapper namespace="User">
      <select id="params1" parameterType="map"  resultType="User">
          select * from t_user where username=#{username} and password=#{password}
      </select>
</mapper>

        其中,map是java.util.Map的别名。

        UserDao.java部分代码如下所示:

Map<String,Object> map= new HashMap<String, Object>();
map.put("username", "zhangsan");
map.put("password","444");
sqlSession=sqlSessionFactory.openSession();
users=sqlSession.selectList("User.params1",map);
sqlSession.commit();
sqlSession.close();

(9)多表查询返回一个结果集

        本例中,我们使用t_user表和t_address表。

        user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"">
<mapper namespace="User">
      <select id="selecttables" resultMap="User_Address">
          select a.*,b.* 
          from t_user a,t_address b
          where a.Id=b.UserId
      </select>

     <resultMap type="com.uni2uni.www.Model.User_Address" id="User_Address">
      <id column="id" property="id" />
      <result column="Username" property="Username" />
      <result column="Password" property="Password" />
      <result column="UserId" property="UserId" />
      <result column="Address" property="Address" />
     </resultMap>
</mapper>

         UserDao.java部分代码如下所示:

SqlSession sqlSession=null;
List<User_Address> models=null;
sqlSession=sqlSessionFactory.openSession();
models=sqlSession.selectList("User.selecttables");
sqlSession.commit();
sqlSession.close();

二、Demo

        下载:http://pan.baidu.com/s/1qWwhx6W

转载于:https://my.oschina.net/wlb/blog/287818

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值