1. Mybatis–使用注解去实现CRUD(增删改查)
不要默认开启事务提交尽量,万一你的代码有问题,提交上去后果很严重!!!
MybatisUtils.java
// 这里设置为true是默认开启事务提交 return sqlSessionFactory.openSession(true);
package com.tian.util;
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 java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
// SqlSessionFactory-->session
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 第一步: 使用Mybatis获取SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
// SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
public static SqlSession getSqlSession() {
// 这里设置为true是默认开启事务提交
return sqlSessionFactory.openSession(true);
}
}
1.1 增加
UserMapper.java
// 添加用户
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd});")
void addUser(User user);
UserMapperTest.java
@Test
public void test02() {
// 获取SqlSession对象
try (SqlSession sqlSession = MybatisUtils.getSqlSession()) {
// 执行sql
// 方式1: getMapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(5, "旭哥", "111");
mapper.addUser(user);
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果
1.2 删除
UserMapper.java
// 删除用户
@Delete("delete from user where id = #{id}")
void deleteUser(@Param("id") int id);
UserMapperTest.java
@Test
public void test04() {
// 获取SqlSession对象
try (SqlSession sqlSession = MybatisUtils.getSqlSession()) {
// 执行sql
// 方式1: getMapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 删除id为1的user
mapper.deleteUser(1);
} catch (Exception e) {
e.printStackTrace();
}
}
1.3 修改
UserMapper.java
// 修改用户
@Update("update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id}")
void uppdateUser(User user);
UserMapperTest.java
@Test
public void test03() {
// 获取SqlSession对象
try (SqlSession sqlSession = MybatisUtils.getSqlSession()) {
// 执行sql
// 方式1: getMapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.uppdateUser(new User(5, "余余", "11111"));
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果
1.4 查询
方法存在多个参数,所有的参数前面必须加上@Param()注解
UserMapper.java
//方法存在多个参数,所有的参数前面必须加上@Param("id")注解
@Select("select * from `mybatis`.`user` where id=#{id} and name=#{name};")
User getUserByNameAndId(@Param("id") int id, @Param("name") String name);
UserMapperTest.java
@Test
public void test() {
// 获取SqlSession对象
try (SqlSession sqlSession = MybatisUtils.getSqlSession()) {
// 执行sql
// 方式1: getMapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 查询 id为1 name="无余"的user
User user = mapper.getUserByNameAndId(1, "无余");
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果:
1.5 关于@Param( )注解
基本类型的参数或者String类型,需要加上
引用类型不需要加
如果只有一个基本类型的话,可以忽略,但是建议大家都加上
我们在SQL中引用的就是我们这里的@Param()中设定的属性名
#{} 可以防止SQL注入 安全
和 $ {} 不可以防止SQL注入 不安全