public class MybatisUtils{
private static SqlSessionFactory sqlSessionFactory;
static{
String resource="mybatis-config.xml"
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream)
}
//有了SqlSesion,可以从汇总获得SqlSession的实例
//SqlSession完全包含了面向数据库执行Sql命令所需要的所有方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
//实体类
public class User{
private int id;
private String name;
private String pwd;
public User(){}
public User(){
this.id = id;
this.name = name;
this.pwd = pwd;
}
get set方法 toString
}
//dao
public interface UserDao{
//扩展:模糊查询
List getUserLike(String value);
//查询全部用户
List getUserList();
//根据id查询用户
User getUserById(int id);
//insert一个用户
int addUser(User user);
//通过map方式
int addUser(Map map)
//修改用户
int updateUser(User user);
//删除一个用户
boolean deleteUser(int id);
}
public class UserDaoImpl implements UserDao{
public List getUserList(){
//执行sql
String sql = "select * from mybatis.user"
//结果集
resultSet
return null;
}
}
//接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件
//UserMapper.xml
//namespace=绑定一个对应的Dao/Mapper接口
select * from mybatis.user where name like "%"#{value}"%"
//select查询语句 id相当于 原来impl实现类中的方法名
public class UserDaoTest{
@Test
public void getUserLike(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userlist = mapper.getUserLike("%李%");
for(User user:userList){
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void test(){
//第一步:获得SqlSession对象
SqlSesson sqlSession = MybatisUtils.getSqlSession();
//方式一:getMapper 推荐
UserDao userDao = sqlSession.getMapper(UserDao.class);
List userList = userDao.getUserList();
//方式二:
List userList = sqlSession.selectList("com.kuang.dao.UserDao.getUserList");
for(User user :userList){
System.out.println(userList);
}
sqlSession.close();
}
@Test
public void getUserById(){
SqlSesson sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
//增删改需要提交事务
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class) //视频中将UserDao.class改名为UserMapper
int res = mapper.addUser(new User(4,"呵呵","123132"));
//提交事务(必须,,,,否则数据库不会改变)
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int num = mapper.upadateUser(new User(4,"七七","15646"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = SqlSession.getMapper(UserMapper.class);
boolean result = mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
//万能的map,用了 map就不需要传所有的参数
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession(UserMapper.class);
Map map = new HashMap();
map.put ("userid",5);
map.put("password","33333");
mapper.addUser2(map);
sqlSession.close();
}
}
解决属性名和字段名不一致的问题 select * from mybatis.user where id = #{id} select id,name,pwd from mybatis.user where id = #{id} 解决方法:
方法一:起别名
select id,name ,pwd as password from mybatis.user where id = #{id}
方法二:结果映射集resultMap
column 数据库中的字段,property实体类中的属性
select * from mybatis.user where id = #{id}
select * from user limit startIndex,pageSize;
select * from user limit 0,3;
public interface UserMapper{
//分页
List getUserLimit(Map map);
}
//分页
select * from mybatis.user limit #{startIndex},#{pageSize}
public calss UserMapperTest{
@Test
public void getUserByLimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap map = new HashMap();
map.put("startIndex",0);
map.put("pageSize",2);
List userByLimit = mapper.getUserByLimit(map);
for(User user:userList){
System.out.println(user);
}
sqlSession.close();
}
}
RowBounds分页--------- 不再使用sql实现分页
使用注解的方式…
public interface UserMapper{
@Select("select * from user");
List getUsers();
//方法存在多个参数,所有参数前面必须加上@Param
@Select("select * from user where id=#{id}")
User getUserById(@Param("id") int id);
@Insert("insert into user(id,name,pwd) value(#{id},#{name},#{pwd})")
int addUser(User user);
@Update("update user set name=#{name},pwd=#{password} where id = #{id}")
int updateUser(User user);
@Delete("delete from user where id=#{id}")
int deleteUser(@Param("uid") int id);
}
public class UserMapperTest{
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//List user = mapper.getUsers();
//for(User user :users){
// System.out.println(user);
//}
User userById = mapper.getUserById(1);
System.out.println(userById);
mapper.addUser(new User(5,"Hello","1231"));
mapper.updateUser(new User(5,"hhh","123115"));
mapper.deleteUser(5);
sqlSession.close();
}
@Data
public classs Student{
private int id;
private String name;
//学生需要关联一个老师
private Teacher teacher;
}
@Data
public class Teacher{
private int id;
private String name;
}
public interface StudentMapper{
//查询所有学生信息,以及对应的老师的信息
public List getStudent();
public List getStudent2();
}
public interface TeacherMapper{
@Select("select * from teacher where id =#{uid}")
Teacher getTeacher(@Param("tid")int id);
}
resources下建包 com.kaung.dao
StudentMapper.xml =====================按照查询嵌套处理
//
select * from student
//复杂的属性,需要单独处理,对象association,,集合:collection
select * from teacher where id = #{id}
=====================按照结果嵌套处理
select s.id sid,s.name sname,t.name tname
from studnet s,teacher t
where s.tid= t.id;
TeacherMapper.xml
mybatis.config.xml中加入
public class MyTest{
public static void main(String [] args){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper =sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacher(1);
System.out.println(teacher);
SqlSession.close();
}
@Test
public void testStudent(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List student= mapper.getStudent();
for(Student student:studentList){
System.out.println(student);
}
SqlSession.close();
}
}
@Data
public class Studnet{
private int id ;
private String name;
private int tid;
}
@Data
public class Teacher{
private int id;
private String name;
//一个老师拥有多个学生
private List students;
}
public interface TeacherMapper{
//获取老师
List getTeacher();
//获取指定老师下的所有学生及老师的信息
Teacher getTeacher(@Param(tid) int id);
Teacher getTeacher2(@Param(tid) int id);
}
select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid = t.id ====================按结果嵌套查询
select s.id sid,s.name sname,t.name tname,t.id tid
from student s,teacher t
where s.tid = t.id and t.id = #{tid}
//复杂的属性,我们需要单独处理 对象association 集合:collection
//javaType="指定属性的类型" ,,集合中的泛型信息,我们使用ofType获取
====================按查询嵌套处理
select * from mybatis.teacher where id = #{tid}
select * from mybatis.student where tid=#{tid}
@Data
public class Blog{
private int id;
private String author;
private Date createTime;//属性名和字段名不一致
private int views;
}
-----------------BlogMapper.java-----------
public interface BlogMapper{
//插入数据
int addBlog(Bolg bolg);
//查询博客
List queryBlogIF(Map map);
List queryBlogChoose(Map map);
//更新博客
int updateBlog(Map map);
//查询地1-2-3号记录的访客
List queryBlogForeach(Map map);
}
----------------BlogMapper.xml----------
insert into mybatis.blog(id,title,author,create_time,views)
values (#{id},#{title},#{author},#{create_time},#{views})
//通过if动态查询
select * from mybatis.blog // where 1=1 工作代码一啊不能不会写1=1这此处只是为了测试方便
//标签where可以解决此处选择if 里边追加and的问题
and title =#{title}
and author =#{author}
//通过choose动态查询
title=#{title}
and author=#{author}
and views=#{views}
update mybatis.blog
title = #{title},
author = #{author}
where id =#{id}
//我们现在传递一个万能的map,这个map中可以存在一个集合
//select * from mybatis.blog where 1=1 and (id=1 or id=2 or id=3) 语句智能去掉where 1==1
select * from mybatis.blog
id=#{id}
public class MyTest{
@Test
public void addBlogTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
Blog blog = new Blog();
blog.setId(IDutils.getId());
blog.setTitle(Mybatis);
blog.setAuthor(狂神说);
blog.setCreateTime(new Date());
blog.setViews(9999);
mapper.addBook(blog);
blog.setId(IDutils.getId());
blog.setTitle(Java);
mapper.addBook(blog);
blog.setId(IDutils.getId());
blog.setTitle(Spring);
mapper.addBook(blog);
blog.setId(IDutils.getId());
blog.setTitle(微服务);
mapper.addBook(blog);
sqlSession.close();
}
@Test
public void queryBlogIF(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
map.put("title","java如此简单");
map.put("author","狂神说")
Lish blogs = mapper.queryBlogIF(map);
for(Blog blog :blogs){
System.out.println(blog);
}
sqlSession.close();
}
@Test
public void queryBlogForEach(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
ArrayList ids = new ArrayList();
//ids.add(1);
//ids.add()2;
map.put("ids",ids);
List blogs = mapper.queryBlogForeach(map);
for(Blog blogs:blog){
System.out.println(blog);
}
sqlSession.close();
}
@SuppressWarnings("all")//抑制警告
public class IDutils{
public static Stirng getId(){
return UUID.randomUUID().toString().replaceAll("-",".");
}
@Test
public void test(){
System.out.println(IDutils.getId());
}
}
public interface UserMapper{
//根据id查询用户
User queryUserById(@Param("id") int id);
}
//在配置中开启别名后 resultType不需要全类名
select * from user where id =#{id}
public class Mytest{
@Test
Public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.queryUser(1);
System.out.println(user);
User user2 = mapper.queryUser(1);
System.out.println(user2);
//user 和user2用的缓存,相当于只做了最后的查询
sqlSession.close();
}
}