package com.zpc.mybatis.dao;
import com.zpc.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper {
public User login(@Param("userName") String userName, @Param("password") String password);
public List queryUserByTableName(@Param("tableName") String tableName);
public User queryUserById(String id);
public List queryUserAll();
public void insertUser(User user);
public void updateUser(User user);
public void deleteUserById(String id);
}
2、创建UserMapper.xml
3、全局配置文件mybatis-config.xml引入UserMapper.xml
4、创建UserMapper测试用例
package com.zpc.mybatis.test;
import com.zpc.mybatis.dao.UserMapper;
import com.zpc.mybatis.pojo.User;
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 java.io.InputStream;
import java.util.Date;
import java.util.List;
public class UserMapperTest {
public UserMapper userMapper;
@Before
public void setUp() throws Exception {
// 指定配置文件
String resource = "mybatis-config.xml";
// 读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 构建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 1. 映射文件的命名空间(namespace)必须是mapper接口的全路径
// 2. 映射文件的statement的id必须和mapper接口的方法名保持一致
// 3. Statement的resultType必须和mapper接口方法的返回类型一致
// 4. statement的parameterType必须和mapper接口方法的参数类型一致(不一定)
this.userMapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void testQueryUserByTableName() {
List userList = this.userMapper.queryUserByTableName("tb_user");
for (User user : userList) {
System.out.println(user);
}
}
@Test
public void testLogin() {
System.out.println(this.userMapper.login("hj", "123456"));
}
@Test
public void testQueryUserById() {
System.out.println(this.userMapper.queryUserById("1"));
}
@Test
public void testQueryUserAll() {
List userList = this.userMapper.queryUserAll();
for (User user : userList) {
System.out.println(user);
}
}
@Test
public void testInsertUser() {
User user = new User();
user.setId("11");
user.setAge(20);
user.setBirthday(new Date());
user.setName("大神");
user.setPassword("123456");
user.setSex(2);
user.setUserName("bigGod222");
this.userMapper.insertUser(user);
System.out.println(user.getId());
}
@Test
public void testUpdateUser() {
User user = new User();
user.setBirthday(new Date());
user.setName("静静");
user.setPassword("123456");
user.setSex(0);
user.setUserName("Jinjin");
user.setId("1");
this.userMapper.updateUser(user);
}
@Test
public void testDeleteUserById() {
this.userMapper.deleteUserById("1");
}
}
public List queryUserByTableName(@Param("tableName") String tableName);
select * from ${tableName}
#{}多个参数时:
public User login( String userName, String password);
select * from tb_user where user_name = #{userName} and password = #{password}
报错:
org.apache.ibatis.exceptions.PersistenceException:
Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'userName' not found. Available parameters are [0, 1, param1, param2]
Cause: org.apache.ibatis.binding.BindingException: Parameter 'userName' not found. Available parameters are [0, 1, param1, param2]
解决方案一:
select * from tb_user where user_name = #{0} and password = #{1}
解决方案二:
select * from tb_user where user_name = #{param1} and password = #{param2}
最终解决方案:
public User login(@Param("userName") String userName, @Param("password") String password);
select * from tb_user where user_name = #{userName} and password = #{password}
通常在方法的参数列表上加上一个注释@Param(“xxxx”) 显式指定参数的名字,然后通过KaTeX parse error: Expected 'EOF', got '#' at position 10: {“xxxx”}或#̲{“xxxx”} sql语句动…{}; sql语句中某个参数进行占位的时候#{}
9.3.面试题(#、$区别)
User queryUserListByName1(@Param("username1") String username1);
User queryUserListByName2(@Param("username2") String username2);
select * from tb_user WHERe user_name=#{username1}
select * from tb_user WHERe user_name='${username2}'//手动加了引号
@Test
public void testUpdateUser() {
User user = new User();
user.setBirthday(new Date());
user.setName("静静");
user.setPassword("123456");
user.setSex(0);
user.setUserName("Jinjin");
user.setId("1");
this.userMapper.updateUser(user);
}
10.4.foreach
场景:按照多个id查询用户信息
接口:
List queryUserListByIds(@Param("ids") String[] ids);
配置:
select * from tb_user where id in
#{id}
测试:
@Test
public void queryUserListByIds() throws Exception {
List users = this.userMapper.queryUserListByIds(new String[]{"1","2"});
for (User user : users) {
System.out.println(user);
}
}
If:testognl表达式或者简单java代码 Choose when otherwise—>相当于if else if else When test参考if Where set 都有一定的纠错功能 Trim:prefix suffix prefixOverrides suffixOverrides Foreach:collection item saparator open close
评论列表(0条)