数据准备:
在MySQL数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个teacher表,同时预先插入几条数据。如图所示:
一、利用mapper.xml绑定接口实现对teacher表中的数据的增、删、改、查。
1、创建MyBaitsDemo1项目,使用mapper.xml绑定接口实现对数据库记录的查询操作。编写程序,完成如下操作:
(1)查询tno=“121002”的客户的记录;
(2)查询全部教师记录;
(3)查询姓周的教师记录;
2、使用mapper.xml绑定接口实现对数据库记录的操作。编写程序,完成如下操作:
(1)新增教师记录:(“210002”,“王强”,“高级实验师”,“18041314946”);
(2)修改教师记录:将工号为“121004”的教师教师姓名改为“李刚”;
(3)删除工号为“121001”的教师记录;
创建MybatisUtil工具类
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();
}
}
1.创建映射文件
在Mapper下创建一个映射文件,在已配置好的mybatis-config.xml文件中添加路径。
注意:namespace的路径要修改成自己的接口
<!DOCTYPE mapper
PUBLIC "-//mybatis.org.//DTD mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="DAO.TeacherDAO">
<!--查询所有老师信息-->
<select id="findAll" resultType="pojo.Teacher">
select *
from teacher
</select>
<select id="findByNo" parameterType="string" resultType="pojo.Teacher">
select *
from teacher
where TNO = #{id}
</select>
<select id="findZhou" parameterType="string" resultType="pojo.Teacher">
select *
from teacher
where TNAME like concat('%', #{value}, '%')
</select>
<insert id="insertByDao" parameterType="pojo.Teacher">
insert into teacher values (#{tno}, #{tname}, #{titles}, #{phone})
</insert>
<update id="updateByDao" parameterType="pojo.Teacher">
update teacher set TNAME=#{tname} where TNO=#{tno}
</update>
<delete id="deleteByDao" parameterType="string">
delete from teacher where TNO=#{value}
</delete>
</mapper>
2.创建接口实现动太代理
1.在包DAO创建一个TeacherDAO.java的接口文件,创建以下方法
import pojo.Teacher;
import java.util.List;
public interface TeacherDAO {
Teacher findByNo(String tno);
List<Teacher> findZhou(String name);
List<Teacher> findAll();
void insertByDao(Teacher t);
void updateByDao(Teacher t);
void deleteByDao(String tno);
}
注意:这里的方法名要与映射文件的id一致。
3.测试
使用SqlSession.getMapper()方法完成自动代理,在使用接口动态代理的对数据库的增删改查的时候,mysql是没有立刻做出响应的,所有需要在java代码中调用comit() 方法来提交事物。
1.测试代码
@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<Teacher> lists = mapper.findAll();
for (Teacher l : lists) {
System.out.println(l);
}
//查询姓周的教师记录
System.out.println("查询姓周的教师记录");
List<Teacher> zhou = mapper.findZhou("周");
for (Teacher l : zhou) {
System.out.println(l);
}
session.close();
}
2.测试代码,
@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();
}
二、利用注解方式绑定接口实现对teacher表中的数据的增、删、改、查。
1、创建MyBaitsDemo2项目,使用注解方式绑定接口实现对数据库记录的查询操作。编写程序,完成如下操作:
(1)查询tno=“124001”的客户的记录;
(2)查询全部教师记录;
(3)查询职称为讲师的教师记录;
3、使用注解方式绑定接口绑定接口实现对数据库记录的操作。编写程序,完成如下操作:
(1)新增教师记录:(“210003”,“李志强”,“助教”,“18041304946”);
(2)修改教师记录:将工号为“121002”的教师教师职称改为“副教授”;
(3)删除工号为“124001”的教师记录;
1.创建接口
在包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<Teacher> findAll();
//查询职称为讲师的教师记录
@Select("select * from teacher where TITLES=#{titles}")
List<Teacher> 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了
2.测试
1.测试代码
@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<Teacher> list1 = mapper.findAll();
for (Teacher l : list1) {
System.out.println(l);
}
//查询姓讲师的教师记录
System.out.println("查询姓讲师的教师记录");
List<Teacher> list2 = mapper.findTitles("讲师");
for (Teacher l : list2) {
System.out.println(l);
}
session.close();
}
2.测试代码
@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'
下面这俩篇是我完成的时候看到文章,给大家参考一下。