之前的介绍中,我们大致了解了如何利用xml文档进行数据库的增删查插,这样虽然足够方便,但是利用注解可以进一步的简化操作。(在mybatis中,xml是主流,注解只可以解决简单的操作)
回顾之前利用xml文档进行数据库信息查询:
ex:查询所有的信息:
- UserMapper层设置接口:
//查询数据库全部信息,以一个list接收
List<User> getUserList();
- UserMapper.xml配置查询语句:
<!--这里的resultType是我自己设置的别名,怎么设置看前面的文章介绍-->
<select id="getUserList" resultType="DIYname">
select * from mybatis.user
</select>
- 测试:
@Test
//查询全部用户
public void SelectUsers() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.SelectUser();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
利用注解进行信息查询:
- 在mybatis-config.xml文件中捆绑接口
<mappers>
<mapper class="com.kuang.dao.UserMapper"/>
</mappers>
- 利用注解就不需要xml文档了,这里删去之前创建的Usermapper.xml
- 创建接口
//查询全部信息
@Select("select * from mybatis.user")
List<User> SelectUser();
备注:之前xml文件在接口创建一个函数,然后在xml文档里面配置sql语句,这里的话直接添加 注释@select() 就可以,一步到位。
- 测试
@Test
//查询全部用户
public void SelectUsers() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.SelectUser();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
注释操作解决其他简单的sql命令:
UserMapper.java 层
//1. 根据id查询
//使用@param,可以解决接口中的参数只可以有一个的困扰,可以传入多个参数
@Select("select * from mybatis.user where id = #{id} and name = #{name}")
User getUserById(@Param("id") int id,@Param("name")String name);
//2. 根据name和psw查询
@Select("select * from mybatis.user where psw = #{psw} and name = #{name}")
List<User> getUserById2(@Param("psw") String psw,@Param("name")String name);
//插入信息
@Insert("insert into mybatis.user (id,name,psw) values (#{id},#{name},#{psw})")
int InsertUser(Map<String,Object> map);
//1.修改信息
@Update("update mybatis.user set psw = #{psw} where id = #{id}")
int UpdateUser(Map<String,Object> map);
//2.修改信息
@Update("update mybatis.user set psw = #{psw} where id = #{id} and name =#{name}")
int UpdateUser2(User user);
//删除
@Delete("delete from mybatis.user where id = #{id}")
int DeleteUser(@Param("id") int id);
}
测试:
//根据 psw和name 查询用户。
@Test
public void GetUserById2() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> user = mapper.getUserById2("22929", "查斗");
System.out.println(user);
sqlSession.close();
}
//根据 id和name 查询用户。
@Test
public void GetUserById() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(4, "赵朗");
System.out.println(user);
sqlSession.close();
}
//插入信息,已经在xml设置了自动提交事务,不需要sqlSession.commit()
@Test
public void InsertUsers() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("id", 8);
map.put("name", "查斗");
map.put("psw", "9029021");
mapper.InsertUser(map);
sqlSession.close();
}
//修改信息
@Test
public void UpdateUsers() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("id",9);
map.put("psw","0033131");
mapper.UpdateUser(map);
sqlSession.close();
}
//每次必须输入全部的属性,比如我想根据id,修改密码,但是必须输入name的属性。
@Test
public void UpdateUsers2() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.UpdateUser2(new User(9,"查斗","22929"));
sqlSession.close();
}
//删除
@Test
public void DeleteUsers() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.DeleteUser(4);
sqlSession.close();
}
备注:理解@param:
1.什么是@param?
答:是注解的一种形式,可以对比@select,@update,@delete理解
2.为什么要使用@param?
答:以为一般情况下,如果创建接口方法的时候,只允许传一个参数,例:
//根据id查询
User getUserById(int id);
实际上规范的代码格式应该是这样(只有一个参数的时候@param可以省略):
User getUserById(@param("id")int id);
@param最大的作用是可以解决传入多个参数的问题。
3.怎么使用@param
但是如果我们想要给这个方法传入多个参数怎么办呢,例如根据name和psw共同查询,可以这样修改
//2. 根据name和psw查询
@Select("select * from mybatis.user where psw = #{psw} and name = #{name}")
List<User> getUserById2(@Param("psw") String psw,@Param("name")String name);
测试代码:
//根据 psw和name 查询用户。
@Test
public void GetUserById2() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> user = mapper.getUserById2("22929", "查斗");
System.out.println(user);
sqlSession.close();
}
结果显示:
(数据库信息)
查询结果:
4. @param使用的注意事项?
如果参数是 JavaBean , 则不能使用@Param。
上文使用的param的参数类型,都是简单的类型
//实体类
public class User {
private int id;
private String name;
private String PASSWORD;
如果不是int,string,float等等类似的,而是Map,student,teacher之类的就不可以使用@param注解。
总结
本次我们初步了解并且应用了在mybati中注解的简单实用,也了解到了涉及的相关知识,比如@Param的使用,也尝试使用两种方法去增删改查,new一个实体类和map的形式。