MyBatis的初步使用

来源:互联网 发布:天猫双11交易数据 编辑:程序博客网 时间:2024/06/03 14:51

这里用到的是mybatis-3.2.2.jar mysql-connector-java-5.1.24-bin.jar

学生表:学生Id(自增),学生姓名

对学生表进行CRUD, 查询条件“学生姓名”

Student 实体类

package com.bnuep.domain;

public class Student {
 int id;
 String name;

 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;
 }

}

 

StudentMapper.java

package com.bnuep.mapper;

import java.util.Map;

import com.bnuep.domain.Student;

public interface StudentMapper {
 public void insertStudent(Student student);
 public Student selectStudent(String name);
 public void deleteStudent(String name);
 public void updateStudent(Map map);
}

StudentMapper.xml

<?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">
<mapper namespace="com.bnuep.mapper.StudentMapper">
 <!-- 这里namespace必须是StudentMapper接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry” -->
 <insert id="insertStudent" parameterType="Student">
  insert into student(name) values(#{name})
  <!-- 这里sql结尾不能加分号,否则报“ORA-00911”的错误 -->
 </insert>

 <!-- 这里的id必须和UserMapper接口中的接口方法名相同,不然运行的时候也要报错 -->
 <select id="selectStudent" resultType="Student" parameterType="java.lang.String">
  select * from student where name=#{name}
 </select>
 <!-- 传多个参数使用Map -->
 <update id="updateStudent" parameterType="java.util.Map">
  update student set
  name=#{name} where name=#{name2}
 </update>

 <delete id="deleteStudent" parameterType="java.lang.String">
  delete from student
  where name = #{name}
 </delete>
</mapper>

获取SessionFactory的工具类

package com.bnuep.Util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

//这个类专门用来获取sessionfactroy的
public class MapperUtil {
 private final static SqlSessionFactory sqlSessionFactory;
 //静态初始化块
 static {
  String resource = "mybatis-config.xml";
  Reader reader = null;
  try {
   reader = Resources.getResourceAsReader(resource);
  } catch (IOException e) {
   System.out.println(e.getMessage());

  }
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
 }
 
 //定义静态方法获取
 public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
     }
}

 

Junit测试类

package com.bnuep.mapper;

import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

import com.bnuep.Util.MapperUtil;
import com.bnuep.domain.Student;

public class StudentMapperTest {

 @Test
 public void insertStudent() {
  SqlSessionFactory sessionFactory = MapperUtil.getSqlSessionFactory();
  SqlSession session = sessionFactory.openSession();
  Student student = new Student();
  student.setName("Ascii");
  StudentMapper studentMapper = session.getMapper(StudentMapper.class);
  studentMapper.insertStudent(student);
  session.commit();
  session.close();
 }

 @Test
 public void selectStudent() {
  SqlSessionFactory sessionFactory = MapperUtil.getSqlSessionFactory();
  SqlSession session = sessionFactory.openSession();
  StudentMapper studentMapper = session.getMapper(StudentMapper.class);
  Student student = studentMapper.selectStudent("Rose");
  System.out.println(student.getName());
  session.close();
 }

 @Test
 public void updateStudent() {
  SqlSessionFactory sessionFactory = MapperUtil.getSqlSessionFactory();
  SqlSession session = sessionFactory.openSession();
  StudentMapper studentMapper = session.getMapper(StudentMapper.class);
  Map<String,String> map = new HashMap<String, String>();
  map.put("name","Jack");
  map.put("name2","Tom");
  studentMapper.updateStudent(map);
  session.commit();
  session.close();
 }
 
 @Test
 public void deleteStudent() {
  SqlSessionFactory sessionFactory = MapperUtil.getSqlSessionFactory();
  SqlSession session = sessionFactory.openSession();
  StudentMapper studentMapper = session.getMapper(StudentMapper.class);
  studentMapper.deleteStudent("Jack");
  session.commit();
  session.close();
 }
}

SRC目录下mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
 <settings>
  <!-- changes from the defaults for testing -->
  <setting name="cacheEnabled" value="false" />
  <setting name="useGeneratedKeys" value="true" />
  <setting name="defaultExecutorType" value="REUSE" />
 </settings>
 <typeAliases>
  <typeAlias alias="Student" type="com.bnuep.domain.Student" />
  <typeAlias alias="Course" type="com.bnuep.domain.Course" />
 </typeAliases>
 <environments default="development">
  <environment id="development">
   <transactionManager type="jdbc" />
   <dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost/hibernate" />
    <property name="username" value="root" />
    <property name="password" value="root" />
   </dataSource>
  </environment>
 </environments>
 <mappers>
  <mapper resource="com/bnuep/mapper/StudentMapper.xml" />
  <mapper resource="com/bnuep/mapper/CourseMapper.xml" />
 </mappers>
</configuration>

下面是课程的代码

成绩表:   成绩Id(GUID),课程名称,学生Id,分数
对成绩表进行CRUD,查询条件:     

1)根据学生姓名查询,查出该学生所有的成绩
2)根据分数查询:把所有“60<分数<90”的学生信息给查询出来

课程实体类

package com.bnuep.domain;

public class Course {
 
 String cname;
 int id;
 int score;
 int sid;
 
 public String getCname() {
  return cname;
 }
 public int getId() {
  return id;
 }
 public int getScore() {
  return score;
 }
 public int getSid() {
  return sid;
 }
 public void setCname(String cname) {
  this.cname = cname;
 }
 public void setId(int id) {
  this.id = id;
 }
 public void setScore(int score) {
  this.score = score;
 }
 public void setSid(int sid) {
  this.sid = sid;
 }
}


package com.bnuep.mapper;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bnuep.domain.Course;

public interface CourseMapper {
 //这里并未定义方法 直接在测试类里使用selectList
}

CourseMapper.xml

<?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">
<mapper namespace="com.bnuep.mapper.CourseMapper">


 <!-- 自定义一个结果集 -->
 <resultMap type="Course" id="courseResultMap">
  <id property="id" column="ID" />
  <result property="cname" column="CNAME" />
  <result property="sid" column="SID" />
  <result property="score" column="SCORE" />
 </resultMap>

 <select id="selectCourse" parameterType="java.lang.String"
  resultMap="courseResultMap">
  select * from course
  where sid = (select id from student
  where
  name=#{name})
 </select>


 <resultMap type="com.bnuep.domain.Student" id="courseScoreResultMap">
  <id property="id" column="ID" />
  <result property="name" column="NAME" />
 </resultMap>
 
 <select id="select_Score_Course" parameterType="java.lang.String"
  resultMap="courseScoreResultMap">
  select student.* from student join (select sid from course
  where score between 60 and 90) tt on (tt.sid=student.id)
 </select>
</mapper>

测试类

package com.bnuep.mapper;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

import com.bnuep.Util.MapperUtil;
import com.bnuep.domain.Course;
import com.bnuep.domain.Student;

public class CourseMapperTest {

 @Test
 public void selectCourseTest() {
  SqlSessionFactory sessionFactory = MapperUtil.getSqlSessionFactory();
  SqlSession session = sessionFactory.openSession();
  // 传入一个xml中定义的id名,后面传入的是参数jack
  List<Course> list = session.selectList(
    "com.bnuep.mapper.CourseMapper.selectCourse", "Rose");
  for (int i = 0; i < list.size(); i++) {
   System.out.println(list.get(i).getCname() + "   "
     + list.get(i).getScore());
  }
  session.close();
 }

 @Test
 public void select_Score_CourseTest() {
  SqlSessionFactory sessionFactory = MapperUtil.getSqlSessionFactory();
  SqlSession session = sessionFactory.openSession();
  // 传入一个xml中定义的id名,后面传入的是参数jack
  List<Student> list = session
    .selectList("com.bnuep.mapper.CourseMapper.select_Score_Course");
  for (int i = 0; i < list.size(); i++) {
   System.out.println("NAME "+list.get(i).getName() + " ID "
     + list.get(i).getId());
  }
  session.close();
 }
}

 


0 0
原创粉丝点击