mybatis 注解CRUD
1.在mybatisUtils中设置事务的自动提交
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
//使用mybatis第一步:获取sqlSessionFactory对象
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource); ;
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSqlSession(){
return sqlSessionFactory.openSession(true);
}
2.mapper文件中写入注解方式:
//使用注解进行增删改查
//根据id查询用户
@Select("select * from user where id = #{id}")
User selectUserById(@Param("id") int id);
//添加一个用户
@Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser3(User user);
//修改一个用户
@Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);
//根据id删除用
@Delete("delete from user where id = #{id}")
int deleteUser1(@Param("id")int id);
3.测试类
//注解增删改查 测试类
//查找用户
@Test
public void testSelectUserById() {
SqlSession session = MybatisUtils.getSqlSqlSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(7);
System.out.println(user);
session.close();
}
//添加用户
@Test
public void testaddUser3() {
SqlSession session = MybatisUtils.getSqlSqlSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User(9, "小玲", "123456");
mapper.addUser3(user);
session.close();
}
//修改
@Test
public void testUpdateUser() {
SqlSession session = MybatisUtils.getSqlSqlSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User(5, "熊猫", "zxcvbn");
mapper.updateUser(user);
session.close();
}
//删除
@Test
public void testDeleteUser() {
SqlSession session = MybatisUtils.getSqlSqlSession();
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.deleteUser1(2);
session.close();
}
【注意点:增删改一定记得对事务的处理】本文中设置自动提交,所以在测试类中不用再次提交。
关于@Param
@Param注解用于给方法参数起一个名字。以下是使用原则:
- 在方法只接受一个参数的情况下,可以不使用@Param。
- 在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。
- 如果参数是 JavaBean , 则不能使用@Param。
- 不使用@Param注解时,参数只能有一个,并且是Javabean。
#与$的区别
#{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符? 【推荐使用】
INSERT INTO user (name) VALUES (#{name});
INSERT INTO user (name) VALUES (?);
${} 的作用是直接进行字符串替换
INSERT INTO user (name) VALUES ('${name}');
INSERT INTO user (name) VALUES ('xiong');