mybatis入门之CURD
1. maven 依赖
<properties >
<mybatis.version > 3.3.0</mybatis.version >
<junit.version > 4.0</junit.version >
<mysql.version > 5.1.40</mysql.version >
</properties >
<dependencies >
<dependency >
<groupId > junit</groupId >
<artifactId > junit</artifactId >
<version > ${junit.version}</version >
<scope > test</scope >
</dependency >
<dependency >
<groupId > org.mybatis</groupId >
<artifactId > mybatis</artifactId >
<version > ${mybatis.version}</version >
</dependency >
<dependency >
<groupId > mysql</groupId >
<artifactId > mysql-connector-java</artifactId >
<version > ${mysql.version}</version >
</dependency >
</dependencies >
2. 构建测试的数据库
create table student(
sid int (4 ) primary key auto_increment,
sname char (50 ),
age int (3 ),
gno int (4 )
);
3. 创建jdbc.properties , 把数据库配置信息外置
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306 /你的数据库名
username=你的数据库用户名
password=你的密码
4. 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 resource ="jdbc.properties" > </properties >
<environments default ="development" >
<environment id ="development" >
<transactionManager type ="JDBC" />
<dataSource type ="POOLED" >
<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/zhy/Student.xml" />
<mapper class ="com.zhy.user.dao.StudentMapper" > </mapper >
</mappers >
</configuration >
5. bean实体类
package com.zhy.user.bean;
/**
* Created by Administrator on 2017/7/20 0020.
*/
public class Student {
private int sid;
private String sname;
private int age;
private int gno;
public int getSid () {
return sid;
}
public void setSid (int sid) {
this .sid = sid;
}
public String getSname () {
return sname;
}
public void setSname (String sname) {
this .sname = sname;
}
public int getAge () {
return age;
}
public void setAge (int age) {
this .age = age;
}
public int getGno () {
return gno;
}
public void setGno (int gno) {
this .gno = gno;
}
public Student () {
}
@Override
public String toString () {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", age=" + age +
", gno=" + gno +
'}' ;
}
}
6. SqlSeesionFactory对象获取。MybatisUtils.java
package com.zhy.test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
/**
* Created by Administrator on 2017/7/22 0022.
*
* Mybatis工具类
*/
public class MybatisUtils {
public static SqlSessionFactory getSqlSessionFactory (){
String resource = "config.xml" ;
InputStream inputStream = null ;
try {
inputStream = Resources.getResourceAsStream(resource);
}catch (Exception e){
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}
}
7. xml 映射,映射文件:Student.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.zhy.user.bean.Student" >
<select id ="selectStudent" parameterType ="int" resultType ="com.zhy.user.bean.Student" >
select * from student s where s.sid=#{sid}
</select >
<insert id ="insertStudent" parameterType ="com.zhy.user.bean.Student" >
insert into student(sname,age,gno) values (#{sname},#{age},#{gno})
</insert >
<delete id ="deleteStudent" parameterType ="int" >
delete from student where sid=#{sid}
</delete >
<update id ="updateStudent" parameterType ="com.zhy.user.bean.Student" >
update student set sname=#{sname} where sid=#{sid}
</update >
</mapper >
8. 通过xml配置对数据库操作, TestMybatisByXml.java
package com.zhy.test;
import com.zhy.user.bean.Student;
import com.zhy.user.dao.StudentMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
/**
* Created by Administrator on 2017/7/22 0022.
*
* 通过xml配置
*/
public class TestMyBatisByXml {
@Test
public void selectTest (){
SqlSession session = null ;
try {
session = MybatisUtils.getSqlSessionFactory().openSession();
Student student = session.selectOne("com.zhy.user.bean.Student.selectStudent" ,2 );
System.out.println(student);
}catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
}
@Test
public void insertTest (){
SqlSession session = null ;
try {
session = MybatisUtils.getSqlSessionFactory().openSession();
Student student = new Student();
student.setSname("Mr.Mybatis" );
student.setAge(12 );
student.setGno(1 );
int resultNum = session.insert("com.zhy.user.bean.Student.insertStudent" ,student);
System.out.println(resultNum);
}catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
}
@Test
public void deleteTest (){
SqlSession session = null ;
try {
session = MybatisUtils.getSqlSessionFactory().openSession(true );
int num = session.delete("com.zhy.user.bean.Student.deleteStudent" ,17 );
System.out.println(num);
}catch (Exception e){
e.printStackTrace();
}finally {
session.close();
}
}
@Test
public void updateStudent (){
SqlSession session = null ;
try {
session = MybatisUtils.getSqlSessionFactory().openSession(true );
Student student = new Student();
student.setSname("zh1" );
student.setSid(2 );
int num = session.update("com.zhy.user.bean.Student.updateStudent" , student);
System.out.println(num);
}catch (Exception e){
e.printStackTrace();
}finally {
session.close();
}
}
}
9. 通过接口配置,StudentMapper.java
package com.zhy.user.dao;
import com.zhy.user.bean.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
/**
* Created by Administrator on 2017/7/21 0021.
*/
public interface StudentMapper {
@Select ("select * from student where sid=#{sid}" )
public Student selectStudent (int sid);
@Insert ("insert into student(sname,age, gno) values(#{sname},${age},#{gno})" )
public int insertStudent (Student student);
@Delete ("delete from student where sid=#{sid}" )
public int deleteStudent (int sid);
@Update ("update student set sname=#{sname} where sid=#{sid}" )
public int updateStudent (Student student);
}
10. 通过接口配置对数据库的操作, TestMybatisByInterface.java
package com .zhy .test
import com .zhy .user .bean .Student
import com .zhy .user .dao .StudentMapper
import org.apache .ibatis .session .SqlSession
import org.junit .Test
import com .zhy .test .MybatisUtils
public class TestMybatisByInterface {
@Test
public void selectTest(){
SqlSession session = null
try{
session = MybatisUtils.getSqlSessionFactory ().openSession (true)
StudentMapper studentMapper = session.getMapper (StudentMapper.class )
Student student = studentMapper.selectStudent (2 )
System.out .println (student)
}catch (Exception e) {
e.printStackTrace ()
}finally {
session.close ()
}
}
@Test
public void insertTest(){
SqlSession session = null
session = MybatisUtils.getSqlSessionFactory ().openSession ()
StudentMapper studentMapper = session.getMapper (StudentMapper.class )
Student student = new Student()
student.setSname ("zh332hyahaha" )
student.setGno (1 )
student.setAge (18 )
try {
int num = studentMapper.insertStudent (student)
System.out .println (num)
}catch (Exception e){
e.printStackTrace ()
}finally {
session.commit ()
session.close ()
}
}
@Test
public void deleteTest(){
SqlSession session = null
try {
session = MybatisUtils.getSqlSessionFactory ().openSession ()
StudentMapper studentMapper = session.getMapper (StudentMapper.class )
int num = studentMapper.deleteStudent (18 )
System.out .println (num)
session.commit ()
}catch (Exception e){
e.printStackTrace ()
}finally {
session.close ()
}
}
@Test
public void updateStudent(){
SqlSession session = null
try {
session = MybatisUtils.getSqlSessionFactory ().openSession ()
StudentMapper studentMapper = session.getMapper (StudentMapper.class )
Student student = new Student()
student.setSname ("zh" )
student.setSid (2 )
int num = studentMapper.updateStudent (student)
session.commit ()
System.out .println (num)
}catch (Exception e){
e.printStackTrace ()
}finally {
session.close ()
}
}
}
注意:
SqlSesisonFactory.openSession ()方法默认是不主动提交事务的。事务通过主动和手动两种方式提交。
A. 主动:SqlSessionFactory.openSession (true)返回SqlSession对象,这样是会主动提交事务。
B. 手动:SqlSessionFactory.openSession ()返回SqlSession对象,这是手动提交事务,在做数
据库操作后,记得用SqlSession对象的commit()方法手动提交事务,否则会出现sql语句执行成功了,但是
数据库数据没有发生改变的情况。更多SqlSession的介绍请参考官网。
Mybatis的简单CURD操作,更多介绍请参考Mybatis官网:
http: //www.mybatis .org /mybatis-3 /zh /index.html