工程结构:
1、在test库创建表student(MySql数据库)
2、创建实体类Student.java
package com.gdut.testMybatis.vo; public class Student { private int id; private String name; public Student() { super(); } public Student(int id, String name) { this.id = id; this.name = 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; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } }
3、写Dao接口
package com.gdut.testMybatis.dao; import java.util.List; import java.util.Map; import com.gdut.testMybatis.vo.Student; public interface IStudentDao { void insertStudent(Student student); //添加 void insertStudentCacheId(Student student);//添加并返回此学生id void deleteStudentById(int id);//删除学生 void updateStudentById(Student student);//修改学生 List<Student> selectAllStudents();//查询所有学生,返回List Map<String, Object> selectAllStudentsMap();//查询所有学生,返回Map Student selectById(int id);//根据id查询 List<Student> selectByName(String name);//根据name查询 }
4、配置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.gdut.testMybatis.dao.IStudentDao"> <insert id="insertStudent" parameterType="Student"><!-- mapper动态代理。其底层自动实现Dao接口 --> insert into student(id,name) values(#{id}, #{name}) <!-- name是表字段,#{name}这个name是属性,mybatis会自动添加get方法获取属性值,不是成员变量 --> </insert> <insert id="insertStudentCacheId" parameterType="Student"> insert into student(id,name) values(#{id},#{name}) <!-- mysql:AFTER oracle:BEFORE mysql是先插入后有id --> <selectKey resultType="int" keyProperty="id" order="AFTER"> select @@identity </selectKey> </insert> <delete id="deleteStudentById"> delete from student where id = #{xxx} <!-- 这块的#{}仅仅是一个占位符,可以随便指定值 --> </delete> <update id="updateStudentById" parameterType="Student"> update student set name=#{name} where id=#{id} </update> <select id="selectAllStudents" resultType="Student"> select id,name from student </select> <select id="selectById" resultType="Student"> select id,name from student where id=#{id} </select> <select id="selectByName" resultType="Student"> <!-- 推荐使用这种 --> select id,name from student where name like '%' #{xxx} '%' <!-- select id,name,age,score from student where name like concat('%',#{xxx},'%') --> <!-- 这种不建议使用,这种使用statement查询方式,有sql注入风险 --> <!-- select id,name,age,score from student where name like '%${value}%' --> </select> </mapper>
5、mybatis.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> <!-- 别名 --> <typeAliases> <!-- <typeAlias type="com.gdut.testMybatis.vo.Student" alias="Student"/> --> <package name="com.gdut.testMybatis.vo"/> </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:3306/test" /> <property name="username" value="数据库用户名" /> <property name="password" value="数据库密码" /> </dataSource> </environment> </environments> <!-- 配置映射文件 --> <mappers> <mapper resource="com/gdut/testMybatis/dao/studentMapper.xml"/> </mappers> </configuration>
6、编写utils类,用于创建SqlSession
package com.gdut.testMybatis.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
public static SqlSession getSqlSession() {
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
if (sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //build()方法会把inputStream关闭掉
} else {
inputStream.close();
}
return sqlSessionFactory.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
7、测试类Test1.java
package com.gdut.testMybatis; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.gdut.testMybatis.dao.IStudentDao; import com.gdut.testMybatis.util.MyBatisUtils; import com.gdut.testMybatis.vo.Student; public class Test1 { IStudentDao dao; SqlSession sqlSession; @Before public void before() { sqlSession = MyBatisUtils.getSqlSession(); dao = sqlSession.getMapper(IStudentDao.class); } @After public void after() { if (sqlSession != null) { sqlSession.close(); } } @Test public void test01() { Student student = new Student(4, "学生4"); dao.insertStudent(student); sqlSession.commit(); } @Test public void test02() { Student student = new Student(5, "学生5"); System.out.println("插入前:" + student); dao.insertStudentCacheId(student); sqlSession.commit(); System.out.println("插入后:" + student); } @Test public void test03() { dao.deleteStudentById(13); sqlSession.commit(); } @Test public void test04() { Student student = new Student(4, "学生4-1" ); student.setId(19); dao.updateStudentById(student); sqlSession.commit(); } @Test public void test05() { List<Student> students = dao.selectAllStudents(); for (Student student : students) { System.out.println(student); } } /* @Test public void test06() { Map<String, Object> map = dao.selectAllStudentsMap(); System.out.println(map.get("张三")); }*/ @Test public void test07() { Student student = dao.selectById(7); System.out.println(student); } @Test public void test08() { List<Student> students = dao.selectByName("学生3"); for (Student student : students) { System.out.println(student); } } }
配置文件默认都在类路径下面,即src文件夹下。
mapper.xml则是与Dao放在相同位置