mybatis实现了接口绑定,使用会更加方便
接口绑定:mybatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,就可以直接调用接口方法就可以
接口绑定方式:
通过注解绑定,直接在方法上面加上@Select@Update等注解,在注解里包含SQL绑定
通过XML里面SQL绑定,需要在xml配置文件里的namespace必须指定接口的全限定名
配置xml文件
步骤
创建pojo类创建mapper.java接口创建mapper.xml配置文件在mymybatis-confixml中添加mapper配置创建测试类
这里以student表为例进行编码:
创建pojo类
给定是四个属性SID,Sname,Ssex,Sage
并右击generate出他们的getterandsetter和toString()方法
public class Student {
private Integer SID;
private String Sname;
private String Ssex;
private Integer Sage;
public Integer getSID() {
return SID;
}
public void setSID(Integer SID) {
this.SID = SID;
}
public String getSname() {
return Sname;
}
public void setSname(String sname) {
Sname = sname;
}
public String getSsex() {
return Ssex;
}
public void setSsex(String ssex) {
Ssex = ssex;
}
public Integer getSage() {
return Sage;
}
public void setSage(Integer sage) {
Sage = sage;
}
@Override
public String toString() {
return 'Student{' +
'SID=' + SID +
', Sname='' + Sname + ''' +
', Ssex='' + Ssex + ''' +
', Sage=' + Sage +
'}';
}
}
创建StudentMapper接口
import com.tulun.pojo.Student;
import java.util.List;
public interface StudentMapper {
//通过id来查询某一个学生信息
// @Select('select * from cheche where SID = #{id}')
public Student selectStudentById(Integer id);
// 通过id删除某条学生数据
public void deleteStudentById(Integer id);
//查询所有数据
public List selectAllStudent();
//动态查询数据
public List selectStudent(Student student);
}
创建mapper.xml配置文件
delete from cheche where SID = #{id}
创建测试类
import com.tulun.pojo.Student;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
public class StudentMapperTest {
SqlSessionFactory sqlSessionFactory = null;
@Before
public void before(){
String resource = 'mybatis-config.xml';
InputStream stream = null;
try {
stream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
System.out.println('before方法执行结束');
}
@Test
public void selectStudentById() {
System.out.println('查询数据的方法开始执行');
//获取会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//第一种 原始直接调用方法
// Student o = sqlSession.selectOne('com.tulun.mapper.StudentMapper.selectStudentById',2);
// System.out.println(o);
//第二种方法 代理模式 代理对象需要依赖于原始调用方法
//通过接口获取对象实例
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
//测试接口
Student student = studentMapper.selectStudentById(2);
System.out.println(student);
}
@Test
public void selectAllStudent() {
System.out.println('查询数据的方法开始执行');
//获取会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//原始调用方式
// List student = sqlSession.selectList('com.tulun.mapper.StudentMapper.selectAllStudent');
// Iterator iterator1 = student.iterator();
// while (iterator1.hasNext()){
// System.out.println(iterator1.next());
// }
// System.out.println('-------------------------------');
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List selectAllStudent = mapper.selectAllStudent();
Iterator iterator = selectAllStudent.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
@Test
public void deleteStudentById() {
System.out.println('删除方法开始执行');
//获取会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过接口获取对象实例
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
studentMapper.deleteStudentById(2);
sqlSession.commit();
}
@Test
public void selectStudent(){
//获取会话
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
Student student = new Student();
student.setSID(1);
student.setSname('88');
// List students = studentMapper.selectStudent(student);
//
// Iterator iterator = students.iterator();
// while (iterator.hasNext()){
// System.out.println(iterator.next());
// }
}
@After
public void after() {
System.out.println('after方法执行结束');
}
}
注解绑定
步骤
创建pojo类创建mapper.java接口在mybatis-confixml中添加mapper配置创建测试类
这里以teacher表为例进行编码:
创建pojo类
给定是三个属性id,name,sex
并右击generate出他们的getterandsetter和toString()方法
public class Teacher {
private Integer id;
private String name;
private String sex;
@Override
public String toString() {
return 'Teacher{' +
'id=' + id +
', name='' + name + ''' +
', sex='' + sex + ''' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
创建TeacherMapper接口
里面给定要操作数据库的方法
在方法的上方写上sql语句
格式为:@Insert('sql语句')
import org.apache.ibatis.annotations.*;
import com.tulun.pojo.Teacher;
import java.util.List;
interface TeacherMapper {
//注解形式
// @Results(id='teacherResult',value = {
// @Result(property = 'id',column = 'id',id =true),
// @Result(property = 's',column = 'sex')}
// )
//选择
@Select('select * from teacher where id = #{id}')
public Teacher selectTeacherById(Integer id);
//删除
@Delete('delect from teacher where id = #{id}')
public void deleteTeacherById(Integer id);
//更新
//这个更新我还没研究好
public int updateTeacherById(String sex, String name);
//添加
// @Options(useGeneratedKeys = true ,keyColumn = 'id')
@Insert('insert into teacher(id,name,sex) values (#{id},#{name},#{sex})')
public int insertTeacherById(Teacher teacher);
}
更改配置
将mybatis-confixml中的mapper标签里的内容更改
创建测试类TeacherMapperTest
import com.tulun.pojo.Teacher;
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 org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import static org.junit.Assert.*;
public class TeacherMapperTest {
SqlSessionFactory sqlSessionFactory = null;
@Before
public void before(){
String resource = 'mybatis-config.xml';
InputStream stream = null;
try {
stream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
System.out.println('before方法执行结束');
}
@Test
public void selectTeacherById() {
}
@Test
public void deleteTeacherById() {
}
@Test
public void updateTeacherById() {
}
@Test
public void insertTeacherById() {
SqlSession sqlSession = sqlSessionFactory.openSession();
TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = new Teacher();
teacher.setId(10);
teacher.setName('jing');
teacher.setSex('nv');
teacherMapper.insertTeacherById(teacher);
sqlSession.commit();
}
}
这里主要演示一下插入操作
插入一组数据
执行操作之前数据库里的内容:
执行插入操作之后数据库内容为:
插入成功!
这里还有一个知识点关于属性值自增问题
@Options(useGeneratedKeys = true ,keyColumn = 'id')
在sql上方将自增的属性值打开,并指定id是哪个自增属性。
假如id可以自增,那在TeacherMapperTest类中传参数时不需要传入id值,在数据库中会根据id字段中最大的数据接着自增。
@Options(useGeneratedKeys = true ,keyColumn = 'id')
@Insert('insert into teacher(id,name,sex) values (#{id},#{name},#{sex})')
public int insertTeacherById(Teacher teacher);
再次运行插入结果如下:
在java代码中打开自增的按钮,还需要你的数据库中该属性可以有主键和自增的约束,在我的数据库中,teacher表中的id属性约束是:
@select操作
当java中teacher对象中的属性和数据库中的属性名完全一致时,会自动识别映射
但当java中属性sex变成s时,和数据库中的sex不匹配,想要吧他俩匹配起来,要怎样做呢?
在TeacherMapper.java中添加如下代码,这样可以将java中的属性和数据库中的属性进行匹配
@Results(id='teacherResult',value = {
@Result(property = 'id',column = 'id',id =true),
@Result(property = 's',column = 'sex')}
)
@Select('select * from teacher where id = #{id}')
public Teacher selectTeacherById(Integer id);
查询表中的所有数据
StudentMapper.java类中的方法
SqlSessionFactory sqlSessionFactory = null;
@Before
public void before(){
String resource = 'mybatis-config.xml';
InputStream stream = null;
try {
stream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
System.out.println('before方法执行结束');
}
@Test
public void selectAllStudent() {
System.out.println('查询数据的方法开始执行');
//获取会话
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List selectAllStudent = mapper.selectAllStudent();
//把获取的Student对象一一打印出来
Iterator iterator = selectAllStudent.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
执行结果:
文章为作者独立观点,不代表股票交易接口观点