🌈有幸相识 ,我是小相。有一个大厂梦,努力奔赴!加油陌生人!🌈
☁️该文章是跟随B站狂神学习Mybatis时的笔记与心得,若与您有用,感谢点赞。文章不免有不足之处,请指出,我会及时改正!
该部分代码位于:mybatis-04-annotations · xcy.小相/web-Mybatis - 码云 - 开源中国 (gitee.com)
1. 适用场景
- SQL语句较为简单时。
- 对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。
- 注解在接口上实现
- 不适合复杂的SQL语句
2. 简单使用
2.1 接口
public interface UserMapper {
@Select("select * from users")
List<User> getUserList();
}
2.2 SQL注解
@Select("select * from users")
2.3 注册
<!--mtbatis-config.xml-->
<mappers>
<mapper class="top.xcyxiaoxiang.dao.UserMapper"/>
</mappers>
2.4 测试
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUnits.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUserList();
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
3. CRUD
3.1 设置自动提交事务
mybatis默认设置为不自动提交事务。
public class MybatisUnits {
private static SqlSessionFactory sqlSessionFactory;
// 获取sqlSessionFactory对象
static{
InputStream inputStream = null;
try {
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获得 SqlSession 的实例。
* SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
* 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
* @return
*/
public static SqlSession getSqlSession(){
// 此处设置autocommit==true ,默认为false
return sqlSessionFactory.openSession(true);
}
}
3.2 使用@Param()注解指定参数
- 使用多个基本类型或String类型的参数时,需要通过
@Param注解
来指定参数名称。#{
}中的名称与@Param
中定义的名称相同。 - 当参数为1个时,可以忽略。
- 当参数为除String类型之外的引用类型时,不需要使用该注解。
public interface UserMapper {
// 查询所有用户
@Select("select * from users")
List<User> getUserList();
// 根据用户id查询用户
@Select("select *from users where id = #{userId}")
User getUserById(@Param("userId") int id);
// 插入用户
@Insert("insert into users values(#{id},#{name},#{pwd})")
void insertUser(User user);
// 删除用户
@Delete("delete from users where id=#{id}")
void deleteUser(@Param("id")int id);
//更新用户
@Update("update users set name=#{userName} where id=#{userId}")
void updateUser(Map map);
}
public class UserDaoTest {
@Test
public void getUserList(){
SqlSession sqlSession = MybatisUnits.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUserList();
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUnits.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
}
@Test
public void insertUser(){
SqlSession sqlSession = MybatisUnits.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.insertUser(new User(4,"孟刘","234123"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUnits.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUnits.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("userId",3);
map.put("userName","王五");
mapper.updateUser(map);
sqlSession.commit();
sqlSession.close();
}
}
<mappers>
<mapper class="top.xcyxiaoxiang.dao.UserMapper"/>
</mappers>