MyBatis 实战-使用 maven 构建(3)- 基本增删改查的实现
来源:互联网 发布:五化深化优化强化细化 编辑:程序博客网 时间:2024/06/06 03:40
MyBatis 实战-使用 maven 构建(3)- 基本增删改查的实现
注意事项:
(1)增删改都要提交事务。
session.commit();
(2)增删改在接口中可以设置返回值。注意:增加、修改方法的参数是一个对象。
/** * 增加、删除、修改都可以设置返回值的数量 * 注意,这里的参数是一个类型为 User 的对象 * @param user * @return */ int addUser(User user); int updateUser(User user); int deleteUser(int id);
观察对应的映射文件:
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user(userName,userAge,userAddress) values(#{userName},#{userAge},#{userAddress})</insert><update id="updateUser" parameterType="User"> update user set userName=#{userName}, userAge=#{userAge}, userAddress=#{userAddress} where id=#{id}</update><delete id="deleteUser" parameterType="int"> delete from user where id=#{id}</delete>
(3) insert 方法可以获得自动增长的主键
id 和 parameterType 分别与 UserMapper 接口中的 addUser 方法的名字和 参数类型一致。以 #{userName } 的形式引用 User 参数的 userName 属性值, MyBatis 将使用【反射】读取 User 参数的这个属性。 #{userName} 中 userName 大小写敏感。引用其他的 userAge 等属性与此一致。
seGeneratedKeys 设置 为 “true” 表明要 MyBatis 获取由数据库自动生成的主键; keyProperty=”id” 指定把获取到的主键值注入到 User 的 id 属性。
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user(userName,userAge,userAddress) values(#{userName},#{userAge},#{userAddress})</insert>
以下为原博客内容:
Mybatis实战教程(mybatis in action)之三:实现数据的增删改查
前面已经讲到用接口的方式编程。这种方式,要注意的一个地方就是。在 User.xml 的配置文件中,
mapper namespace="com.liwei.mybatis.inter.IUserOperation"
命名空间非常重要,不能有错,必须与我们定义的 package 和接口一致。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:
1、用 mybatis 查询数据,包括列表;
2、用 mybatis 增加数据;
3、用 mybatis 更新数据;
4、用 mybatis 删除数据;
查询数据,前面已经讲过简单的,下面我们介绍如何查询出一个 List 列表。
查询出列表,也就是返回 list, 在我们这个例子中也就是 List<User>
,这种方式返回数据,需要在 User.xml 里面配置返回的类型 resultMap, 注意不是 resultType,而这个 resultMap 所对应的应该是我们自己配置的 resultMap 的 id 属性值。
配置 User.xml 文件的片段:
<!-- 为了返回 list 类型而定义的 returnMap --> <resultMap type="User" id="resultListUser"> <id column="id" property="id"/> <result column="userName" property="userName" /> <result column="userAge" property="userAge" /> <result column="userAddress" property="userAddress" /> </resultMap> <!-- 返回 list 的 select 语句,注意 resultMap 的值指向前面定义好的 resultMap 的 id 值--> <select id="selectUsers" parameterType="string" resultMap="resultListUser"> select * from user where userName like #{userName} </select>
然后,我们在接口中新增一个方法:
package com.liwei.mybatis.inter;import java.util.List;import com.liwei.mybatis.model.User;public interface IUserOperation { User selectUserByID(int id); List<User> selectUsers(String userName);}
可以看到,结果成功查询出来。如果是查询单个数据的话,用第二讲用过的方法就可以了。
底层依赖的 SQL 语句是:
SELECT * FROM USER WHERE userName LIKE '%e%'
结果集:
下面,我们编写测试代码,这一节我们开始引入 jUnit 测试框架:
package com.liwei.test;import java.io.IOException;import java.io.Reader;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import com.liwei.mybatis.inter.IUserOperation;import com.liwei.mybatis.model.User;public class TestMybatis { private SqlSessionFactory sqlSessionFactory; private Reader reader; @Before public void befort(){ try { reader = Resources.getResourceAsReader("Configuration.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } @Test public void testList(){ SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session.getMapper(IUserOperation.class); List<User> users = userOperation.selectUsers("%mm%"); for(User user:users){ System.out.println(user.getId()+":"+user.getUserName()+":"+user.getUserAddress()); } } catch (Exception e) { e.printStackTrace(); } finally{ session.close(); } }}
可以看到,结果成功查询出来。如果是查询单个数据的话,用第二讲用过的方法就可以了。
用 mybatis 增加数据(注意提交事务)
在 IUserOperation 接口中增加方法:
public void addUser(User user);
在 User.xml 中配置
<!-- 执行增加操作的SQL语句。 id 和 parameterType 分别与 IUserOperation 接口中的 addUser 方法的名字和 参数类型一致。以 #{name} 的形式引用 User 参数的 userName 属性值, MyBatis 将使用【反射】读取 User 参数的这个属性。 #{userName} 中 userName 大小写敏感。引用其他的 userAge 等属性与此一致。 seGeneratedKeys 设置 为 "true" 表明要 MyBatis 获取由数据库自动生成的主键; keyProperty="id" 指定把获取到的主键值注入到 User 的 id 属性--> <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user(userName,userAge,userAddress) values(#{userName},#{userAge},#{userAddress}) </insert>
这里要特别注意:insert 的操作一定和事务有关联,所以我们要设置事务,只须要下面一句话就可以了。
session.commit();
测试代码:
@Test public void testAdd(){ SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session.getMapper(IUserOperation.class); User user = new User("wudi", "26", "fujian,fuzhou"); userOperation.addUser(user); session.commit(); // 测试获得自动增长的主键值 System.out.println("测试获得自动增长的主键值:" + user.getId()); } catch (Exception e) { e.printStackTrace(); } finally{ session.close(); } }
用Mybatis 更新数据(注意提交事务)
经过上面几个例子,环境也搭建好了。我们下面要做的就那么几件事:
(1)在 User.xml 中配置 SQL 语句;
(2)在 IUserOperation 接口中增加方法;
(3)编写测试代码。
配置 SQL 语句:
<update id="updateUser" parameterType="User" > update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id} </update>
接口中增加的方法:
void updateUser(User user);
编写测试代码:
@Test public void testUpdate(){ SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session.getMapper(IUserOperation.class); User user = userOperation.selectUserByID(5); user.setUserName("软件工程师"); user.setUserAge("30"); user.setUserAddress("美丽的深圳"); userOperation.updateUser(user); // 注意:这里须要提交事务 session.commit(); } catch (Exception e) { e.printStackTrace(); } finally{ session.close(); } }
用 Mybatis 删除数据(也要记得提交事务)
按照上面的三个步骤来写,你一定也会了。
User.xml 代码片段:
<delete id="deleteUser" parameterType="int"> delete from user where id=#{id} </delete>
接口新增方法:
void deleteUser(int id);
测试代码:
@Test public void testDelete(){ SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session.getMapper(IUserOperation.class); userOperation.deleteUser(4); // 注意:这里须要提交事务 session.commit(); } catch (Exception e) { e.printStackTrace(); } finally{ session.close(); } }
这样,所有增删改查都完成了,注意在增加,更改,删除的时候要调用 session.commit(),这样才会真正对数据库进行操作,否则是没有提交的。
到此为止,简单的单表操作,应该都会了,接下来的时间了,我们介绍多表联合查询,以及结果集的选取(这一部分是很重要的内容)。
- MyBatis 实战-使用 maven 构建(3)- 基本增删改查的实现
- Spring+maven+mybatis 实现增删查改
- springmvc+mybatis+maven+junit实现网页的增删查改
- Mybatis基本应用实现增删改查
- Mybatis学习(3)实现数据的增删改查
- MyBatis的增删改查基本操作
- Mybatis 增删改查的基本操作
- MyBatis使用注解实现增删改查
- mybatis ---- 实现数据的增删改查
- mybatis实现的增删改查例子
- Mybatis实现表单的增删改查
- Mybatis 实现共通的增删改查
- MyBatis实现数据的增删查改
- Mybatis实现数据的增删改查
- Mybatis实现简单的增删改查
- mybatis 使用简单的增删查改
- mybatis实战教程(mybatis in action)之三:实现数据的增删改查
- mybatis实战教程(mybatis in action)之三:实现数据的增删改查
- DedeCMS二次开发 - 文件结构了解
- Codeforces#297 B Pasha and Strini
- FPGA工程师转型
- 数据挖掘10大算法(1)——PageRank
- 监听Gps设置变化方法一
- MyBatis 实战-使用 maven 构建(3)- 基本增删改查的实现
- 第三周项目3----程序的多文件组织
- C++ 类模板中非类型参数的模板参数
- 初涉XML解析
- Spring的配置文件中加载配置文件
- Android webView打不开一些网页的解决办法
- Unity 3D——虚拟场景中的飞行摄像头
- 第四周程序阅读(1)
- js函数参数设置默认值