数据准备:
在MySQL数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个teacher表,同时预先插入几条数据。如图所示:
1、创建MyBaitsDemo1项目,使用mapper.xml绑定接口实现对数据库记录的查询操作。编写程序,完成如下操作:
(1)查询tno=“121002”的客户的记录;
(2)查询全部教师记录;
(3)查询姓周的教师记录;
2、使用mapper.xml绑定接口实现对数据库记录的操作。编写程序,完成如下操作:
(1)新增教师记录:(“210002”,“王强”,“高级实验师”,“18041314946”);
(2)修改教师记录:将工号为“121004”的教师教师姓名改为“李刚”;
(3)删除工号为“121001”的教师记录;
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.InputStream;
public class MybatisUtil {
private static SqlSessionFactory factory=null;
static {
//使用static静态代码块,随着类的加载而加载
try {
String resources = "MybatisConfig.xml";
InputStream is = Resources.getResourceAsStream(resources);
factory=new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取sqlSession对象
public static SqlSession openSession(){
return factory.openSession();
}
}
在Mapper下创建一个映射文件,在已配置好的mybatis-config.xml文件中添加路径。
注意:namespace的路径要修改成自己的接口
insert into teacher values (#{tno}, #{tname}, #{titles}, #{phone})
update teacher set TNAME=#{tname} where TNO=#{tno}
delete from teacher where TNO=#{value}
1.在包DAO创建一个TeacherDAO.java的接口文件,创建以下方法
import pojo.Teacher;
import java.util.List;
public interface TeacherDAO {
Teacher findByNo(String tno);
List findZhou(String name);
List findAll();
void insertByDao(Teacher t);
void updateByDao(Teacher t);
void deleteByDao(String tno);
}
注意:这里的方法名要与映射文件的id一致。
使用SqlSession.getMapper()方法完成自动代理,在使用接口动态代理的对数据库的增删改查的时候,mysql是没有立刻做出响应的,所有需要在java代码中调用comit() 方法来提交事物。
@Test
public void Test2() {
SqlSession session = MybatisUtil.openSession();
TeacherDAO mapper = session.getMapper(TeacherDAO.class);
//查询tno=“121002”的客户的记录
Teacher teacher = mapper.findByNo("121002");
System.out.println("查询tno=“121002”的客户的记录");
System.out.println(teacher);
//查询所有老师信息
System.out.println("查询所有老师信息");
List lists = mapper.findAll();
for (Teacher l : lists) {
System.out.println(l);
}
//查询姓周的教师记录
System.out.println("查询姓周的教师记录");
List zhou = mapper.findZhou("周");
for (Teacher l : zhou) {
System.out.println(l);
}
session.close();
}
@Test
public void Test3() {
SqlSession session = MybatisUtil.openSession();
TeacherDAO mapper = session.getMapper(TeacherDAO.class);
mapper.insertByDao(new Teacher("210002", "王强", "高级实验师", "18041314946"));
mapper.updateByDao(new Teacher("121004", "李刚", null, null));
mapper.deleteByDao("121001");
session.commit(); //提交事物
session.close();
}
1、创建MyBaitsDemo2项目,使用注解方式绑定接口实现对数据库记录的查询操作。编写程序,完成如下操作:
(1)查询tno=“124001”的客户的记录;
(2)查询全部教师记录;
(3)查询职称为讲师的教师记录;
3、使用注解方式绑定接口绑定接口实现对数据库记录的操作。编写程序,完成如下操作:
(1)新增教师记录:(“210003”,“李志强”,“助教”,“18041304946”);
(2)修改教师记录:将工号为“121002”的教师教师职称改为“副教授”;
(3)删除工号为“124001”的教师记录;
在包DAO下创建一个TeacherMapper接口,
package DAO;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import pojo.Teacher;
import java.util.List;
public interface TeacherMapper {
//注解形式
// @Results(id="teacherResult",value = {
// @Result(property = "id",column = "id",id =true),
// @Result(property = "s",column = "sex")}
// )
//查询tno=“124001”的客户的记录
@Select("select * from teacher where TNO = #{id}")
Teacher findByID(String id);
//查询全部教师记录
@Select("select * from teacher")
List findAll();
//查询职称为讲师的教师记录
@Select("select * from teacher where TITLES=#{titles}")
List findTitles(String titles);
//删除
@Delete("delete from teacher where TNO = #{id}")
void deleteBy(String id);
//修改
@Update("update teacher set TITLES=#{titles} where TNO=#{tno}")
void updateBy(Teacher teacher);
//添加
@Insert("insert into teacher(TNO,TNAME,TITLES,PHONE) values (#{tno},#{tname},#{titles},#{phone})")
void insertBy(Teacher teacher);
}
在mybatis-config.xml文件中添加映射文件的路径,注意,这里的是class,不是resource了
@Test
public void test1() {
SqlSession session = MybatisUtil.openSession();
TeacherMapper mapper = session.getMapper(TeacherMapper.class);
//查询tno=“124001”的客户的记录
Teacher teacher = mapper.findByID("124001");
System.out.println("查询tno=“124001”的客户的记录");
System.out.println(teacher);
//查询所有老师信息
System.out.println("查询所有老师信息");
List list1 = mapper.findAll();
for (Teacher l : list1) {
System.out.println(l);
}
//查询姓讲师的教师记录
System.out.println("查询姓讲师的教师记录");
List list2 = mapper.findTitles("讲师");
for (Teacher l : list2) {
System.out.println(l);
}
session.close();
}
@Test
public void test2() {
SqlSession session = MybatisUtil.openSession();
TeacherMapper mapper = session.getMapper(TeacherMapper.class);
mapper.insertBy(new Teacher("210003", "李志强", "助教", "18041304946"));
mapper.updateBy(new Teacher("121002", null, "副教授", null));
mapper.deleteBy("124001");
session.commit(); //提交事物
session.close();
}
这里的#{Tno}一定要与你创建的实体类Teacher的一致,否则就会报错 ,说找不到Tno的get方法
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'Tno' in 'class pojo.Teacher'
### The error may exist in DAO/TeacherMapper.java (best guess)
### The error may involve DAO.TeacherMapper.insertBy-Inline
### The error occurred while setting parameters
### SQL: insert into teacher(TNO,TNAME,TITLES,PHONE) values (?,?,?,?)
### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'Tno' in 'class pojo.Teacher'
下面这俩篇是我完成的时候看到文章,给大家参考一下。
基于Mapper接口动态代理实现原理_叩丁狼的博客-CSDN博客
mybatis的接口绑定方式(注解绑定和配置xml文件)_mybatis接口绑定_风一吹你就要走的博客-CSDN博客