2.1 创建一张数据库表
这是我的student表
2.2 建立与该表映射的对象
Student.java
我在Student.java文件中也设置了三个变量,和数据库表中的三个变量一一映射。
然后利用IDEA直接生成各个变量的get和set方法,以及to string 方法和构造方法。
package one;
public class Student {
int id;
String name;
String gname;
public Student(int id, String name, String gname) {
this.id=id;
this.name=name;
this.gname=gname;
}
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;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gname='" + gname + '\'' +
'}';
}
}
2.3 创建mapper映射文件
一般把mapper映射文件和对应的java文件放在一个包里。我喜欢把mapper文件放在resources包里,运行时也没出问题。
mapper文件的命名前一部分是对应的java文件的名字,后一部分是Mapper,比如我建立的 StudentMapper.xml 文件,这也不单单只是一种命名规则,有些Mybatis运行环境的jar包不支持命名不一致的情况。
<?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="StudentMapper"> <!--双引号里面写mapper文件的路径-->
<!--parameterType是输入参数的类型,resultType是返回值的类型
如果输入参数是八个基本类型,则#{}里可以是任意占位符,如果是对象类型,则必须写相应的参数名字
-->
<select id ="selectOneStudent" parameterType="int" resultType="one.Student">
select * from student where id = #{id}
</select>
<insert id="addStudent" parameterType="one.Student">
insert into student(id,name,gname) values(#{id},#{name},#{gname} )
</insert>
<delete id ="deleteStudent" parameterType="int">
delete from student where id= #{id}
</delete>
<update id="updateStudent" parameterType="one.Student">
update student set name=#{name},gname=#{gname} where id=#{id}
</update>
<select id="selectAllStudent" resultType="one.Student">
select * from student
</select>
</mapper>
我的注释已经写的很清楚了,需要我们自己改的就是两个mapper标签之间的insert、delete、select、update 这些标签里的信息,用什么就添加什么标签,我的代码里把这些全都写上了,其实他们之间就是sql语句。
测试
package one;
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.Reader;
import java.util.List;
public class test {
public static void main(String[] args){
/* try {
selectOneStudent(); //查询单个学生
} catch (IOException e) {
e.printStackTrace();
}
*/
// try {
// selectAllStudent(); //查询多个学生
// } catch (IOException e) {
// e.printStackTrace();
// }
// try {
// addStudent();
// } catch (IOException e) {
// e.printStackTrace();
// }
// try {
// deleteStudent();
// } catch (IOException e) {
// e.printStackTrace();
// }
try {
updateStudent();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void selectOneStudent()throws IOException {
//加载Mybatis配置文件
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "StudentMapper.selectOneStudent";
//通过namespace和id来确定是哪个mapper文件里的哪个作用域
Student student=session.selectOne(statement,1);
System.out.println(student);
session.close();
}
public static void selectAllStudent()throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "StudentMapper.selectAllStudent";
List<Student> students=session.selectList(statement);
System.out.println(students);
session.close();
}
public static void addStudent()throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "StudentMapper.addStudent";
Student student =new Student(4,"奈良","g2");
int count=session.insert(statement,student);
System.out.println(count);
session.commit();
session.close();
}
public static void deleteStudent()throws IOException{
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "StudentMapper.deleteStudent";
session.delete(statement,4);
session.commit();
session.close();
}
public static void updateStudent()throws IOException{
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "StudentMapper.updateStudent";
Student student =new Student(5,"马原","g1");
session.update(statement,student);
session.commit();
session.close();
}
}
main方法里,我把不用的方法给注释掉了,按照需要自行添加或删除注释。
每个方法的前三行都是一样的代码,加载mybatis的配置文件并打开数据库连接。statement里是“mapper文件里的namespace”+“ . ”+“增删改查标签的id”值,通过statement找到对应的mapper文件以及增删改查的sql语句。
输入session再加上一个 “ . ”会弹出很多session里的方法,找出自己需要的即可。
因为前一节事务处理方式配置的是jdbc,所以除了select外,其他的操作都需要在后面加上session.commit(),手动提交。另外,无论增删改查,都需要在最后加上session.close(),关闭数据库连接。