项目全部目录:
1、使用Eclipse或者MyEclipse创建一个Maven项目,并在pom.xml中配置好MyBatis的jar包和MySQL驱动jar包,如下图:
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyBatisDemo</groupId>
<artifactId>MyBatisDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MyBatisDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 导入MyBatis的jar包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 导入MySQL数据库的驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
</dependencies>
<build>
<finalName>MyBatisDemo</finalName>
</build>
</project>
2、打开MySQL数据库,新建数据库test并在test中创建students表:
students表:
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`subject` varchar(50) NOT NULL,
`grade` int(11) NOT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
插入数据:
INSERT INTO `students` VALUES ('1', '张三', '语文', '100');
INSERT INTO `students` VALUES ('2', '李四', '语文', '90');
INSERT INTO `students` VALUES ('3', '王五', '语文', '50');
INSERT INTO `students` VALUES ('4', '张三', '数学', '80');
INSERT INTO `students` VALUES ('5', '李四', '数学', '90');
INSERT INTO `students` VALUES ('6', '王五', '数学', '99');
INSERT INTO `students` VALUES ('7', '李四', '英语', '60');
INSERT INTO `students` VALUES ('8', '王五', '英语', '79');
INSERT INTO `students` VALUES ('9', '赵六', '语文', '240');
3、在src/main/java目录中创建三个包,com.cn.dao,com.cn.entity,com.cn.mapping;利用MyBatis Generator(http://blog.csdn.net/conquer__el/article/details/77192910)自动生成StudentsMapper.java(我自己改成了StudentsDAO.java,也可以不改)、Students.java和StudentsMapper.xml文件并分别复制进入前创建的三个包中。
Students.java:
package com.cn.entity;
public class Students {
private Integer sid;
private String name;
private String subject;
private Integer grade;
public Students() {
}
public Students(Integer sid, String name, String subject, Integer grade) {
super();
this.sid = sid;
this.name = name;
this.subject = subject;
this.grade = grade;
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject == null ? null : subject.trim();
}
public Integer getGrade() {
return grade;
}
public void setGrade(Integer grade) {
this.grade = grade;
}
@Override
public String toString() {
return "Students [sid=" + sid + ", name=" + name + ", subject=" + subject + ", grade=" + grade + "]";
}
}
StudentsDAO.java:
package com.cn.dao;
import com.cn.entity.Students;
public interface StudentsDAO {
int deleteByPrimaryKey(Integer sid);
int insert(Students record);
int insertSelective(Students record);
Students selectByPrimaryKey(Integer sid);
int updateByPrimaryKeySelective(Students record);
int updateByPrimaryKey(Students record);
}
StudentsMapper.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.cn.mapping.StudentsMapper" >
<resultMap id="BaseResultMap" type="com.cn.entity.Students" >
<id column="sid" property="sid" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="subject" property="subject" jdbcType="VARCHAR" />
<result column="grade" property="grade" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
sid, name, subject, grade
</sql>
<!-- 查找 -->
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from students
where sid = #{sid,jdbcType=INTEGER}
</select>
<select id="selectAllRecode" resultMap="BaseResultMap">
select * from students
</select>
<!-- 删除 -->
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from students
where sid = #{sid,jdbcType=INTEGER}
</delete>
<!-- 插入 -->
<insert id="insert" parameterType="com.cn.entity.Students" >
insert into students (sid, name, subject,
grade)
values (#{sid,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{subject,jdbcType=VARCHAR},
#{grade,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="com.cn.entity.Students" >
insert into students
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="sid != null" >
sid,
</if>
<if test="name != null" >
name,
</if>
<if test="subject != null" >
subject,
</if>
<if test="grade != null" >
grade,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="sid != null" >
#{sid,jdbcType=INTEGER},
</if>
<if test="name != null" >
#{name,jdbcType=VARCHAR},
</if>
<if test="subject != null" >
#{subject,jdbcType=VARCHAR},
</if>
<if test="grade != null" >
#{grade,jdbcType=INTEGER},
</if>
</trim>
</insert>
<!-- 修改 -->
<update id="updateByPrimaryKeySelective" parameterType="com.cn.entity.Students" >
update students
<set >
<if test="name != null" >
name = #{name,jdbcType=VARCHAR},
</if>
<if test="subject != null" >
subject = #{subject,jdbcType=VARCHAR},
</if>
<if test="grade != null" >
grade = #{grade,jdbcType=INTEGER},
</if>
</set>
where sid = #{sid,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.cn.entity.Students" >
update students
set name = #{name,jdbcType=VARCHAR},
subject = #{subject,jdbcType=VARCHAR},
grade = #{grade,jdbcType=INTEGER}
where sid = #{sid,jdbcType=INTEGER}
</update>
</mapper>
4、在src/main/resources目录创建两个配置文件jdbc.properties、mybatis-config.xml:
jdbc.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
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>
<!-- 元素允许在主配置文件之外提供一个properties格式对应文件,从而使得主配置文件更加通用。这样对部署非常有用 -->
<properties resource="jdbc.properties" />
<!-- 设置别名,一定要放在properties下面 -->
<typeAliases>
<typeAlias alias="scores" type="com.cn.entity.Students" />
</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?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="christmas258@"/> -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 列出映射文件 -->
<mappers>
<mapper resource="com/cn/mapping/StudentsMapper.xml" />
</mappers>
</configuration>
5、在src/main/test创建测试方法,先创建包com.cn.dao,在创建StudentsDAOTest.java
StudentsDAOTest.java:
package com.cn.dao;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
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 com.cn.entity.Students;
public class StudentsDAOTest {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch(Exception ex){
ex.printStackTrace();
}
}
/*
* 查找
* */
public static void selectByPrimaryKey(int id) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
Students students = session.selectOne("com.cn.mapping.StudentsMapper.selectByPrimaryKey", id);
if (students == null) {
System.out.println("null");
} else {
System.out.println(students.toString());
}
} finally {
session.close();
}
}
public static void selectAllRecode() {
SqlSession session = null;
List<Students> list = new ArrayList<Students>();
try {
session = sqlSessionFactory.openSession();
list = session.selectList("com.cn.mapping.StudentsMapper.selectAllRecode");
if (list == null){
System.out.println("null");
} else {
for(Students stu : list) {
System.out.println(stu.toString());
}
}
} finally {
session.close();
}
}
/*
* 增加
* */
public static void insert(Students students) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
//返回值是记录条数
int resultCount = session.insert("com.cn.mapping.StudentsMapper.insert", students);
System.out.println("当前插入的students_sid: " + students.getSid() + ", 当前插入数据库中的条数:" + resultCount);
session.commit();
} finally {
session.close();
}
}
/*
* 删除
* */
public static void deleteByPrimaryKey(int id) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
int resultCount = session.delete("com.cn.mapping.StudentsMapper.deleteByPrimaryKey",id);
System.out.println("当前输出的条数:" + resultCount);
session.commit();
} finally {
session.close();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//selectByPrimaryKey(10);
selectAllRecode();
//Students students1 = new Students(10, "赵六", "英语", 90);
//insert(students1);
//deleteByPrimaryKey(10);
}
}
6、运行测试方法将数据库的记录打印到后台,或者操作插入、删除数据库记录等,也可以自己再StudentsMapper.xml中配置SQL,然后编写测试方法进行测试。