MyBatis入门案例(二)
根据用户名称模糊查询用户信息列表
SqlMapConfig.xml
SqlMapConfig.xml是mybatis的全局配置文件,一个系统编写一个即可。(可参考MyBatis入门案例(一))mapper.xml映射文件
使用${}拼接符号
上面这种${}方法不能防止sql注入
字符串拼接方式
LIKE CONCAT(CONCAT('%',#{username},'%'))
在实际开发中建议使用#{}占位符方式。
- 代码实现
// 根据用户名称模糊查询用户信息
@Test
public void testFindUserByUsername() throws Exception {
// mybatis全局配置文件
String resource = "SqlMapConfig.xml";
// 根据mybatis的全局配置文件构造一个流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 创建SqlSession会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 使用sqlSession查询用户
//selectList用于将sql查询结果映射成java对象,返回一个List<Object>
// 第一个参数:statement的id,前面要加namespace
// 第二个参数:输入的参数对象值
// selectOne用于返回单个对象,如果sql查询返回一个列表(多个对象),如果使用selectOne报错
List<User> users = sqlSession.selectList("test.findUserByUsername", "张");
System.out.println(users);
// 关闭sqlSession
sqlSession.close();
}
添加用户
- mapper.xml
代码实现:
// 添加用户
@Test
public void testInsertUser() throws Exception {
// mybatis全局配置文件
String resource = "SqlMapConfig.xml";
// 根据mybatis的全局配置文件构造一个流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 创建SqlSession会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 使用sqlSession查询用户
User user = new User();
user.setUsername("刘金旭");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("沉思市场");
sqlSession.insert("test.insertUser", user);
//mybatis需要手动去提交
sqlSession.commit();
// 关闭sqlSession
sqlSession.close();
}
添加用户主键返回
需求
当新记录插入之后需要取出新记录的主键,如果主键是由程序代码生成的获取主键比较方便,如果主键是数据库自动生成的,需要通过程序代码获取新记录的主键。 mybatis要实现执行insert之后将主键通过输入参数对象返回。
数据库自增主键的返回
uuid()生成主键
除了自增主键生成方式之外,还可以生成uuid的唯一序列号。
使用uuid好处:有利于数据库迁移,扩展。
缺点:对uuid数据作索引性能没有对数字型索引高。
用户修改和删除
mapper.xml
代码实现
// 修改用户
@Test
public void testUpdateUser() throws Exception {
// mybatis全局配置文件
String resource = "SqlMapConfig.xml";
// 根据mybatis的全局配置文件构造一个流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 创建SqlSession会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 修改用户
User user = new User();
user.setId(30);
user.setUsername("脆生生");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("时尚");
sqlSession.update("test.updateUser", user);
sqlSession.commit();
// 关闭sqlSession
sqlSession.close();
}
// 删除用户
@Test
public void testDeleteUser() throws Exception {
// mybatis全局配置文件
String resource = "SqlMapConfig.xml";
// 根据mybatis的全局配置文件构造一个流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 创建SqlSession会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 删除用户
sqlSession.update("test.deleteUserById", 30);
sqlSession.commit();
// 关闭sqlSession
sqlSession.close();
}