public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String toString(){
return "User{"+"id="+id+"name="+name+"pwd="+pwd+"}";
}
}
Dao接口(对实体类的操作定义,增删改查等)
public interface UserMapper {
List getUserList();
}
接口实现类(以往用java代码使用jdbc编写,现在用mapper配置文件代替实现类)
select * from mybatis.user
5.测试
public class UserDaoTest {
@Test
public void test(){
//第一步:获得sqlsession对象
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//执行sql,注意这里的UserMapper是接口
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭sqlsession
sqlSession.close();
}
}
注意
要在pom.xml中加入过滤,否则找不到自编的配置文件
src/main/java***.xmlfalse
同时,由于之前mybatis-config.xml中删除了mapper标签,这里要补回来,添加
注意:这里的resource中一定要是‘/’
2.2 CRUD增删改查
1.namespace
namespace中的包名和对应的接口名一致
2.select
选择查询语句:
id:方法名
resultType:结果返回值
parameterType:参数类型
3.整体测试
只需要修改接口UserMapper,添加Mapper.xml中对应的实现方法,编写测试类
定义接口
public interface UserMapper {
//查询全部用户
List getUserList();
//根据id查询用户
User getUserById(int id);
//增加一个用户
int addUser(User user);
//修改用户
int updateUser(User user);
//删除一个用户
int deleteUser(int id);
}
在xml中实现接口
编写测试类
public class UserDaoTest {
@Test
public void test(){
//第一步:获得sqlsession对象
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭sqlsession
sqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(2);
System.out.println(user);
sqlSession.close();
}
@Test
public void addUser(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(4,"wangwu","1452"));
if(res>0){
System.out.println("插入成功");
}
//提交事务
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4,"hehe","123123"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
sqlSession.commit();;
sqlSession.close();
}
}
注意:在增删改后一定要提交事务,否则无法做出修改
2.3万能Map
1.定义接口方法
//万能的Map
User getUserById2(Map map);
2.去Mapper中实现方法
select * from mybatis.user where id = #{id} and name = #{name}
3.测试方法
@Test
public void getUserById2(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap map = new HashMap<>();
map.put("id","1");
map.put("name","姜吉宁");
User user = mapper.getUserById2(map);
System.out.println(user);
sqlSession.close();
}
注意:这里的map中的key要和Mapper中占位符中的参数相同
区别:
使用Map传递参数,只需要在sql中取出key即可
使用对象传递参数,直接在sql中取出对象的属性(属性名要和Mapper中占位符中的参数相同)
只有一个基本类型参数的情况下,可以直接在sql中取到
多个参数用Map或注解(现在还没学)
2.4模糊查询
Java代码执行的时候,传递通配符%,也可以在sql中使用通配符
1.定义接口方法
//模糊查询用户
List getUserLike(String value);
2.去Mapper中实现方法
select * from mybatis.user where name like #{value}
3.测试方法
@Test
public void getUserLike(){
//第一步:获得sqlsession对象
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userList = mapper.getUserLike("李%");
for (User user : userList) {
System.out.println(user);
}
//关闭sqlsession
sqlSession.close();
}
@Test
public void testLog4j(){
logger.info("进入了testlog4j方法");
logger.debug("debug进入了");
logger.error("error:进入testlog4j");
}
以后在测试时需要输出日志信息只需在原sout的地方使用logger即可
6.分页
1.为什么分页?
减少数据的处理量
使用limit分页
select * from user limit startindex,pagesize
使用mybatis实现分页
**第一步:**写使用limit查询接口
//使用limit查询
List getUserByLimit(Map map);
**第二步:**写usermapper.xml中的sql语句
select * from mybatis.user limit #{startindex},#{pagesize}
**第三步:**写测试方法
@Test
public void getUserByLimit(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap hashMap = new HashMap<>();
hashMap.put("startindex",0);
hashMap.put("pagesize",2);
List userList = mapper.getUserByLimit(hashMap);
for (User user : userList) {
System.out.println(user);
}
//关闭sqlsession
sqlSession.close();
}
使用RowBounds分页
**第一步:**写使用RowBounds查询接口
//使用RowBounds查询
List getUserByRowBounds();
**第二步:**写usermapper.xml中的sql语句
select * from mybatis.user
**第三步:**写测试方法
@Test
public void getUserByRowBounds(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
RowBounds rowBounds = new RowBounds(1, 2);
//通过java代码层面实现
List userList = sqlSession.selectList("com.yangtuo.dao.UserMapper.getUserByRowBounds",null,rowBounds);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
7.使用注解开发
7.1面向接口编程——解耦
省略userMapper.xml,直接在接口方法上引入注解,并在括号中写sql语句
7.2CRUD
1.我们可以在工具类创建的时候实现事务的自动提交,true
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
2.编写接口,添加注解
public interface UserMapper {
//查询全部用户
@Select("select * from user")
List getUserList();
//根据id查询用户
@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id);
//增加一个用户
@Insert("insert into user(id,name,pwd) values(#{id},#{name},#{password})")
int addUser2(User user);
//修改用户
@Update("update user set name=#{name} where id=#{id}")
int updateUser2(User user);
//删除一个用户
@Delete("delete from user where id=#{id}")
int deleteUser2(@Param("id") int id);
//使用limit查询
List getUserByLimit(Map map);
//使用RowBounds查询
List getUserByRowBounds();
}
3.编写测试类
public class userMapperTest {
@Test
public void getUserList(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(2);
System.out.println(user);
sqlSession.close();
}
@Test
public void addUser2(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.addUser2(new User(5,"liuliu","123456789"));
sqlSession.close();
}
@Test
public void updateUser2(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser2(new User(5,"niuniu","null"));
sqlSession.close();
}
@Test
public void delete2(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser2(5);
sqlSession.close();
}
}