❤ (ɔˆз(ˆ⌣ˆc)“玥”——乃古上神珠也。见者好运连连,点个关注,咱们来玥方长!
(ง •̀_•́)ง加油😁😁😁
案例:
现有一个学生表s_student和一个班级表c_class,其中,班级表c_class和学生表s_student是一对多的关系。学生表s_student和班级表c_class如下:
学生表s_student 学生id
(id)
学生姓名
(name)
学生年龄
(age)
所属班级
(cid)
1 张三 18 1 2 李四 18 2 3 王五 19 2 4 赵六 20 1
班级表c_class 班级id
(id)
班级名称
(classname)
1 一班 2 二班 要求:
(1)根据学生表和班级表创建数据库,接着采用MyBatis注解完成查询id为2的学生的信息。
(2)利用MyBatis注解,将id为4的学生姓名改为李雷,年龄修改为21。
(3)MyBatis注解实现一对多的查询,查询出二班的所有学生信息。
目录
❤ (ɔˆз(ˆ⌣ˆc)“玥”——乃古上神珠也。见者好运连连,点个关注,咱们来玥方长!
一、前言
除了XML的映射方式,MyBatis还支持通过注解实现POJO对象和数据表之间的关联映射。使用MyBatis注解时,一般将SQL语句直接写在接口上。与XML相比,基于注解的映射方式相对简单和且不会增加系统的开销。MyBatis提供了@Select 、@Delect 、@Update、@Insert和@Param等用于增删改查,以及传递参数的常用注解。
二、创建数据库
(一)创建一个数据库studentsystem
#创建一个数据库studentsystem create database studentsystem use studentsystem
(二)创建学生表并插入数据
#创建一个学生表s_student create table s_student( id int PRIMARY KEY AUTO_INCREMENT, name VARCHAR(32) , age INT, cid INT NOT NULL )DEFAULT CHARSET 'utf8'; #当mysql不支持插入中文数据时,需要加上代码:DEFAULT CHARSET 'utf8' #忘记时,建完表后修改:alter table students convert to character set utf8; #插入四条数据 INSERT INTO s_student values(1,'张三',18,1); INSERT INTO s_student values(2,"李四",18,2); INSERT INTO s_student values(3,"王五",19,2); INSERT INTO s_student values(4,"赵六",20,1);
(三)创建班级表并插入数据
#创建班级表 CREATE table c_class( id INT PRIMARY KEY AUTO_INCREMENT, classname VARCHAR(32) )DEFAULT CHARSET 'utf8'; #插入两条数据 INSERT INTO c_class values(1,'一班'); INSERT INTO c_class values(2,'二班');
三、在IDEA创建Maven项目
(一)配置环境
Mybatis学习-(案例)员工管理系统(三)——创建Maven项目并测试http://t.csdn.cn/YfPWk
请参考我上面这篇文章!!!
项目架构:
(二)创建实体类
1、Student实体类
//Student.java
package com.itheima.pojo; public class Student { private int id; private String name; private int age; private int cid; //getter和setter方法 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 int getAge(){return age;} public void setAge(int age){this.age=age;} public int getCid(){return cid;} public void setCid(int cid){this.cid=cid;} @Override public String toString() { return "Student{id="+id+",name="+name+",age="+age+",cid="+cid+"}"; } }
2、Class班级实体类
//Class.java
package com.itheima.pojo; import java.util.List; public class Class { private int id; private String classname; private List<Student> studentList; //getter和setter方法 public int getId(){return id;} public void setId(int id){this.id=id;} public String getClassname(){return classname;} public void setClassname(String classname){this.classname=classname;} public List<Student> getStudentList(){return studentList;} public void setStudentList(List<Student> studentList){this.studentList=studentList;} @Override public String toString() { return "Class{id="+id+",classname="+classname+",studentList="+studentList+"}"; } }
(三)创建工具类
//MyBatisUtils.java
package com.itheima.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.Reader; public class MyBatisUtils { static SqlSessionFactory sqlMapper=null; static{ try{ String resources="mybatis-config.xml"; Reader reader=null; reader= Resources.getResourceAsReader(resources); sqlMapper=new SqlSessionFactoryBuilder().build(reader); }catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSession() { return sqlMapper.openSession(); } }
(四)创建接口类
1、学生接口类
//StudentDao.java
package com.itheima.dao; import com.itheima.pojo.Student; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; public interface StudentDao { @Select("select * from s_student where id=#{id};") Student findStudentById(int id); @Update({"update s_student set id=#{id},name=#{name},age=#{age},cid=#{cid}","where id=#{id};"}) int updateStudentById(Student student); @Select("select * from s_student where cid=#{cid};") Student findStudentByCid(int cid); }
2、班级、学生一对多查询接口类
//ClassStudentDao.java
package com.itheima.dao; import com.itheima.pojo.Class; import org.apache.ibatis.annotations.*; public interface ClassStudentDao { @Select("select * from c_class where id=#{id};") @Results({@Result(column = "id",property = "id"), @Result(column = "classname",property = "classname"), @Result(column="id",property = "studentList", many = @Many(select = "com.itheima.dao.StudentDao.findStudentByCid"))}) Class findClassStudentById(int id); }
(五)创建测试方法类
//StudentDaoTest.java
import com.itheima.dao.StudentDao; import com.itheima.pojo.Student; import com.itheima.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.io.IOException; public class StudentDaoTest { SqlSession sqlSession= MyBatisUtils.getSession(); StudentDao studentdao=sqlSession.getMapper(StudentDao.class); @Test public void findStudentByIdTest() { System.out.println("findStudentByIdTest:"); Student student=studentdao.findStudentById(2); System.out.println(student); sqlSession.close(); } @Test public void updateStudentByIdTest() { System.out.println("updateStudentByIdTest:"); Student student=new Student(); student.setId(4); student.setName("李雷"); student.setAge(21); student.setCid(1); int result=studentdao.updateStudentById(student); sqlSession.commit(); sqlSession.close(); System.out.println("成功更新了"+result+"条数据"); } }
//ClassStudentDaoTest.java
import com.itheima.dao.ClassStudentDao; import com.itheima.pojo.Class; import com.itheima.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class ClassStudentDaoTest { SqlSession sqlSession= MyBatisUtils.getSession(); ClassStudentDao classStudentDao=sqlSession.getMapper(ClassStudentDao.class); @Test public void findClassStudentByIdTest() { System.out.println("findClassStudentByIdTest:"); Class class1=classStudentDao.findClassStudentById(2); System.out.println(class1); sqlSession.close(); } }
(六)运行测试
(1)根据学生表和班级表创建数据库,接着采用MyBatis注解完成查询id为2的学生的信息。
(2)利用MyBatis注解,将id为4的学生姓名改为李雷,年龄修改为21。
(3)MyBatis注解实现一对多的查询,查询出二班的所有学生信息。
1、查询id为2的学生信息
运行findStudentById()方法:
@Test public void findStudentByIdTest() { System.out.println("findStudentByIdTest:"); Student student=studentdao.findStudentById(2); System.out.println(student); sqlSession.close(); }
运行结果:
2、 将id为4的学生姓名改为李雷,年龄修改为21
运行updateStudentById()方法:
@Test public void updateStudentByIdTest() { System.out.println("updateStudentByIdTest:"); Student student=new Student(); student.setId(4); student.setName("李雷"); student.setAge(21); student.setCid(1); int result=studentdao.updateStudentById(student); sqlSession.commit(); sqlSession.close(); System.out.println("成功更新了"+result+"条数据"); }
运行结果:
查看数据表:
已修改成功!
3、查询出二班的所有学生信息
运行findClassStudentById()方法:
@Test public void findClassStudentByIdTest() { System.out.println("findClassStudentByIdTest:"); Class class1=classStudentDao.findClassStudentById(2); System.out.println(class1); sqlSession.close(); }
运行结果:
四、结语
通过案例的学习,完成对MyBatis注解的学习,关注我,咱们来玥方长!