您的位置:首页 > 编程语言 > Java开发

【Mybatis从0到1-004】模糊查询、更新、删除、添加用户

2017-08-17 20:12 337 查看
【Mybatis从0到1-003】mybatis框架及简单入门程序是解决本章内容的关键,本章节主要是实现模糊查询、更新、删除、添加用户。实现步骤与之前一章完全一样,这里再傻瓜式的走一遍流程,加深记忆与理解。

只需要两步,第一,修改映射文件User.xml;第二,书写程序逻辑代码。

【1】首先,实现模糊查询用户信息。

【1-1】修改映射文件,加入如下代码:

<!-- 根据用户名称模糊查询用户信息,可能返回多条
resultType:指定就是单条记录所映射的java对象 类型
${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
使用${}拼接sql,引起 sql注入
${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value
-->
<select id="findUserByUsername" parameterType="java.lang.String" resultType="po.User">
SELECT *FROM user WHERE username like '%${value}%'
</select>

【1-2】添加程序代码到MyFirstMybatisTest.java文件,加入如下代码。
 public void findUserByUsername() throws Exception {// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);

// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

List<User> userList = sqlSession.selectList("test.findUserByUsername","%小明%");

System.out.println(userList);

// 释放资源
sqlSession.close(); 【1-3】根据之前的创建单元测试的方法,给函数findUserByUsername()创建单元测试,创建好的代码如下所示:



【1-4】运行findUserByUsername()函数,将会显示如下信息:



模糊查询结束。

剩下的更新、删除和添加的步骤,与上面一模一样,这里只贴出关键代码。

【2】更新用户信息

【2-1】配置映射文件

<!-- 根据id更新用户
分析:
需要传入用户的id
需要传入用户的更新信息
parameterType指定user对象,包括 id和更新信息,注意:id必须存在
#{id}:从输入 user对象中获取id属性值
-->
<update id="updateUser" parameterType="po.User">
UPDATE user SET username =#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id =#{id}
</update> 【2-2】添加程序代码到MyFirstMybatisTest.java文件,加入如下代码
// 更新用户信息
public void updateUserTest() throws Exception {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
//必须设置id
user.setId(29);
user.setUsername("王小二");
user.setBirthday(new Date());
user.setSex("2");
user.setAddress("北京海淀");
sqlSession.update("test.updateUser", user);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
} 【2-3】创建测试单元和运行略
【3】删除用户信息
【3-1】配置映射文件

<!-- 删除 用户
根据id删除用户,需要输入 id值
-->
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM user WHERE id=#{id}
</delete> 【3-2】添加程序代码到MyFirstMybatisTest.java文件,加入如下代码
public void deleteUserTest() throws Exception {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);

// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

sqlSession.delete("test.deleteUser",30);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
} 【3-3】创建测试单元和运行略
【4】添加用户
【4-1】配置映射文件

<!-- 添加用户
parameterType:指定输入 参数类型是pojo(包括 用户信息)
#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值
-->
<insert id="insertUser" parameterType="po.User">
<!-- 将插入数据的主键返回,返回到user对象中
SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键

keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
resultType:指定SELECT LAST_INSERT_ID()的结果类型
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user(username,birthday,address) VALUES(#{username},#{birthday},#{address})
</insert>
【4-2】添加程序代码到MyFirstMybatisTest.java文件,加入如下代码

public void insertUserTest() throws Exception {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setSex("1");
user.setUsername("王小军");
user.setAddress("河南郑州");
user.setBirthday(new Date());
sqlSession.insert("test.insertUser",user);
//提交事务
sqlSession.commit();
// 获取用户信息主键
System.out.println(user.getId());
// 释放资源
sqlSession.close();
} 【4-3】创建测试单元和运行略
上面就是通过mybatis进行用户信息的增加、删除、更新、查找的操作,最后做个总结。

【总结】

1. 在映射文件中通过parameterType指定输入 参数的类型

2. 在映射文件中通过resultType指定输出结果的类型

3. #{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型、pojo、hashmap。如果接收简单类型,#{}中可以写成value或其它名称。#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

4. ${}表示一个拼接符号,会导致sql注入,所以不建议使用${}。${}接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,${}中只能写成value。${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

5. selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)

6. selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐