resultType 属性:
用于指定结果集的类型。
parameterType 属性:
用于指定传入参数的类型。
sql 语句中使用#{}字符:
它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。 具体的数据是由#{}里面的内容决定的。
4.增删改查 1. 添加user对象的值 参数类型 parameterTypeinsert into user value (#{wxy_id},#{wxy_username},#{wxy_password})
@Test
public void test3() throws IOException {
//模拟User
User user = new User();
user.setWxy_username("tom");
user.setWxy_password("abc");
//获取核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获取session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作
int i = sqlSession.insert("userMapper.save", user);
List userList = sqlSession.selectList("userMapper.findAll");
//mybatis执行更新操作 提交事务
sqlSession.commit();
//打印
System.out.println(i);
System.out.println(userList);
// 释放资源
sqlSession.close();
}
注意事项:
update user set wxy_username=#{wxy_username},wxy_password=#{wxy_password} where wxy_id=#{wxy_id}
@Test
public void test4() throws IOException {
//模拟User
User user = new User();
user.setWxy_id(4);
user.setWxy_username("tom2");
user.setWxy_password("abc");
//获取核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获取session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作
int i = sqlSession.update("userMapper.update", user);
List userList = sqlSession.selectList("userMapper.findAll");
//mybatis执行更新操作 提交事务
sqlSession.commit();
//打印
System.out.println(i);
System.out.println(userList);
// 释放资源
sqlSession.close();
}
注意问题:
3. 删除
delete from user where wxy_id=#{id}
@Test
public void test5() throws IOException {
//获取核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获取session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作
sqlSession.delete("userMapper.delete",4);
List userList = sqlSession.selectList("userMapper.findAll");
//mybatis执行更新操作 提交事务
sqlSession.commit();
//打印
System.out.println(userList);
// 释放资源
sqlSession.close();
}
注意事项:
5. 新增用户 id 的返回值//IUserDao.xmlselect last_insert_id() insert into user (username, password,name) values(#{username},#{password},#{name});
@Test
public void test2() throws IOException {
Users user = new Users();
user.setName("王麒");
user.setPassword("root");
user.setUsername("root");
userDao.saveUser(user);
System.out.println(user.getId());
}
//结果 0:16:53,612 DEBUG saveUser:143 - ==> Preparing: insert into user (username, password,name) values(?,?,?); 10:16:53,649 DEBUG saveUser:143 - ==> Parameters: root(String), root(String), 王麒(String) 10:16:53,732 DEBUG saveUser:143 - <== Updates: 1 10:16:53,733 DEBUG saveUser!selectKey:143 - ==> Preparing: select last_insert_id() 10:16:53,733 DEBUG saveUser!selectKey:143 - ==> Parameters: 10:16:53,867 DEBUG saveUser!selectKey:143 - <== Total: 1 15 10:16:53,868 DEBUG JdbcTransaction:69 - Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@776b83cc]6. 用户模糊查询
//UserDao.java ListfindByNames(String name);
// 测试
@Test
public void test6() throws IOException {
List names = userDao.findByNames("%王%");
for (Users u : names) {
System.out.println(u);
}
}
6. Mybatis 与 JDBC 编程的比较
-
数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 解决: 在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。
-
Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。 解决: 将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。
-
向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数对应。 解决: Mybatis 自动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输入参数的 类型。
-
对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对 象解析比较方便。 解决: Mybatis 自动将 sql 执行结果映射至 java 对象,通过 statement 中的 resultType 定义输出结果的 类型。
3 Properties标签使用相对于类路径的资源 如: 使用 mapper 接口类路径 如: 注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。 注册指定包下的所有 mapper 接口 如: 注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。
4 typeAliases标签
总结



