mybatis小结2
面向接口编程
/实体类:映射数据库中的表
public class Student {
//对应表中的四个字段,一般情况下,最好属性名和字段名保持一致
private Integer id;
private String name;
private Integer age;
private String 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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
package com.kang3;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.kang2.Student;
//dao层:数据访问层,和数据库打交道的
public interface StudentDao {
public int addStudent(Student student);
//根据id修改学生姓名 多个参数的传递
//@param注解的参数,在映射文件直接使用
public int update(@Param("id")int id,@Param("name")String name);
//根據id刪除學生 只有一個參數時,在映射文件中可以直接使用參數名
public int remove(int id);
//查詢操作和其他操作不同之處,是有結果集
//根據id查詢學生信息 ,結果集中的記錄數不會超過一條 返回值就是查詢到 的學生
public Student queryOne(int id);
//查詢全表 結果集中的記錄數有可能是多條
public List<Student> queryAll();
}
package com.kang3;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.kang2.Student;
public class StudentDaoImpl implements StudentDao{
private SqlSession sqlSession;
public StudentDaoImpl(SqlSession sqlSession) {
this.sqlSession =sqlSession;
}
@Override
public int addStudent(Student student) {
return sqlSession.insert("com.kang3.StudentDao.addStudent",student);
}
@Override
public int update(int id, String name) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int remove(int id) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Student queryOne(int id) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<Student> queryAll() {
// TODO Auto-generated method stub
return null;
}
}
映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 面向接口编程
namespace:必须指定为接口的全限定名称
-->
<mapper namespace="com.kang3.StudentDao">
<!-- sql语句的id必须是接口中对应的方法名
不管关联的方法有没有参数 parameterType都可以省略
-->
<insert id="addStudent">
insert into student (name,age,sex) values
(#{name},#{age},#{sex})
</insert>
<!-- 当有多个参数
传递方式:
1.按照参数的顺序 arg0,arg1,arg2....数字代表第几个参数
2.按照参数的顺序 param1,param2,param3... 数字代表第几个参数 从1开始
3.给接口中方法的参数用@param注解修饰作用就是可以给参数命名,在此处就可以使用
我们给参数的命名
3是推荐使用的方式
-->
<update id="update">
<!-- update student set name =#{arg1} where id =#{arg0} -->
<!-- update student set name =#{param2} where id =#{param1} -->
update student set name =#{name} where id =#{id}
</update>
<delete id="remove">
delete from student where id = #{id}
</delete>
<!--
查詢時,必須指定結果集要映射成的數據類型!!
resultType:指定結果集要映射成java對象的類型
需要是全限定名稱
mybaties會將查出來的記錄轉化為指定的對象
當沒有查詢結果時,返回值為null
-->
<select id="queryOne" resultType="com.kang2.Student">
select * from student where id=#{id}
</select>
<!--
1.此處的Student就是com.yd.modle.Studnet,作用一樣
2.儅返回值為list或者數組這樣的集合時,resultType指定的是集合中的元素類型!!!
-->
<select id="queryAll" resultType="Student">
select * from student
</select>
</mapper>
具体使用
public class Test {
//面向接口编程的具体使用
public static void main(String[] args) throws IOException {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
SqlSession sqlSession = factory.openSession();
SqlSession sqlSession = factory.openSession(true);
//根据接口动态生成代理对象
//参数为接口的字节码对象
StudentDao studentDao=sqlSession.getMapper(StudentDao.class);
List <Student> students = studentDao.queryAll();
System.out.println(students);
// Student stu = studentDao.queryOne(3);
// studentDao.remove(1);
}