@Test
public void getRowBounds(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
//RowBounds实现
RowBounds rowBounds = new RowBounds(0, 2);
//基于java代码实现分页
List us = sqlSession.selectList("com.liu.dao.UserMapper.getRowBounds", null, rowBounds);
for (User user:us){
System.out.println(user);
}
sqlSession.close();
}
使用注解开发
CRUD
1.注解在接口上实现
@Select("select * from mybatis.user")
List gtelist();
//方法存在多个参数,所有参数前面必须加上@Param注解
@Select("select * from mybatis.user where id = #{id}")
User ById(@Param("id") int id);
@Insert("insert into mybatis.user(id,username,pwd) values(#{id},#{username},#{pwd})")
int add(User user);
@Delete("delete from mybatis.user where id = #{id}")
int del(@Param("id") int id);
@Update("update mybatis.user set username=#{username},pwd=#{pwd} where id=#{id}")
int upd(User user);
关于@Param()注解
基本类型的参数或者String类型的参数需要加上
引用类型不需要加
如果只有一个基本类型的话,可以忽略,但是建议加上
我们在Sql中引用的,就是@param中设置的属性名
2.需要在核心配置文件中绑定接口
注意:我们必须要将接口绑定到我们的核心配置文件中
3.测试
public void list(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//查询
List gtelist = mapper.gtelist();
for (User user : gtelist) {
System.out.println(user);
}
//按ID查询
User user = mapper.ById(2);
System.out.println(user);
//修改
mapper.upd(new User(9,"周怡","666999"));
//删除
mapper.del(10);
//添加
mapper.add(new User(10,"周怡","666"));
sqlSession.close();
}
本质:反射机制实现
底层:动态代理
public static SqlSession getSqlSession(){
//开启自动提交事务
return sqlSessionFactory.openSession(true);
}
private int id;
private String name;
//多个学生关联一个老师
private Teacher teacher;
接口
List getStudent();
实现
按照结果嵌套处理
实现
回顾多对一查询方式
子查询
联表查询
一对多
按照结果嵌套处理
实体类
private int id;
private String name;
//一个老师拥有多个学生
private List students;
接口
Teacher getTeacher(@Param("tid") int id);
实现
按照查询嵌套处理
实体和方法不变
关联 - association 多对一
集合 - collection 一对多
javaType & ofTyp
javaType用来指定实体类中属性的类
ofType用来指定映射到List 或者集合中的pojo类型,泛型中的约束类型
实现
动态SQL
什么是动态SQL:动态SQL就是指根据不同的条件生成不同的SQL语句
环境搭建
CREATE TABLE `blog`(
`id` VARCHAR(50) NOT NULL COMMENT 博客id,
`title` VARCHAR(100) NOT NULL COMMENT 博客标题,
`author` VARCHAR(30) NOT NULL COMMENT 博客作者,
`create_time` DATETIME NOT NULL COMMENT 创建时间,
`views` INT(30) NOT NULL COMMENT 浏览量
)ENGINE=INNODB DEFAULT CHARSET=utf8
实体
import java.util.Date;
@Data
public class Blog {
private String id;
private String title;
private String author;
private Date createTime;//属性名和字段名不一致create_time
private int views;
}
ID工具类
public class IDUtils {
public static String getID(){
return UUID.randomUUID().toString().replaceAll("-","");
}
IF(test)
接口
List queryBlog(Map map);
实现
where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return&
在JDK1.5之前的单例实现方式有两种(懒汉式和饿汉式并无设计上的区别故看做一种),两者同是私有构
造器,导出静态成员变量,以便调用者访问。
第一种
package singleton;
public class Singleton {
//导出全局成员
public final static Singleton INSTANCE = new S