MyBatis中注解开发
MyBatis也可以依靠注解开发,不使用mapper.xml,但只适合那些简单的sql语句,复杂和数据量大的还是推荐xml开发。
使用注解开发本质上是利用了jvm的动态代理机制
且使用注解开发会使程序耦合性提高,维护和管理较为麻烦
session工具类:
//获取SqlSession连接
public static SqlSession getSession(){
return getSession(true); //事务自动提交
}
public static SqlSession getSession(){
return sqlSessionFactory.openSession(true);
//当我们给openSession传入true参数时,
//我们就不需要再进行session.commit来提交增删改等操作
//Mybatis可以帮助我们自动提交操作
}
sql类型的注解有:@select (); @update (); @Insert (); @delete ();
//查询全部用户
@Select("select * password from user")
public List<User> getAll();
我们虽不需要了mapper的映射文件,但我们还是需要在mapper核心配置文件中为这个类注入,需要使用class属性
<mappers>
<mapper class="com.nicht.mapper.UserMapper"/>
</mappers>
测试:
public void test() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.getAll();
for (User user : users){
System.out.println(user);
}
session.close();
}
用注解开发MyBatis中CRUD
1 查询
依靠**@select ()**注解来进行查询操作
//查询用户
@Select("select * from user where id = #{id}")
public User getUser(@Parma("id") int id);
其中 @Parma 可以解决属性和数据库列的名称不匹配
<mappers>
<mapper class="com.nicht.mapper.UserMapper"/>
</mappers>
测试:
public void test() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User users = mapper.getUser(1);
System.out.println(user);
session.close();
}
2 增加
依靠**@Insert ()**注解来进行查询操作
//插入用户
@Insert("insert into user(id,name,year) values (#{id},#{name},#{year})")
int addUser(User user);
<mappers>
<mapper class="com.nicht.mapper.UserMapper"/>
</mappers>
测试:
public void test() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user1 = new User(4, "孙笑川", "18");
int i = mapper.addUser(user1);
System.out.println(i);
//因为我们进行给openSession()传入了true参数
//就不再需要session.commit()来提交;
session.close();
}
3 修改
依靠**@update ()**注解来进行查询操作
@Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);
<mappers>
<mapper class="com.nicht.mapper.UserMapper"/>
</mappers>
测试
public void test() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user2 = new User(4, "孙笑川", "18");
int i = mapper.updateUser(user2);
System.out.println(i);
//因为我们进行给openSession()传入了true参数
//就不再需要session.commit()来提交;
session.close();
}
4 删除
依靠**@delete ()**注解来进行查询操作
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id")int id);
<mappers>
<mapper class="com.nicht.mapper.UserMapper"/>
</mappers>
测试
public void test() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
int i = mapper.deleteUser(1);
System.out.println(i);
session.close();
}