Mybatis 简单应用(1)

Mybatis 简单应用(1)

mybatis相关jar包,提取码0923

一,mybatis是什么

	MyBatis是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框架,
	它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互。
	MyBatis的前身是iBATIS,iBATIS于2002年由ClintonBegin创建。MyBatis3是
	iBATIS的全新设计,支持注解和Mapper。
	MyBatis流行的主要原因在于它的简单性和易使用性。在Java应用程序中,
	数据持久化层涉及到的工作有:将从数据库查询到的数据生成所需要的Java
	对象;将Java对象中的数据通SQL持久化到数据库中。
	MyBatis通过抽象底层的JDBC代码,自动化SQL结果集产生Java对象、Java
	对象的数据持久化数据库中的过程使得对SQL的使用变得容易。

二,简单步骤

	第一步:在SQLMapper映射配置文件中配置SQL语句,假定为StudentMapper.xml
		<insert id="insertStudent" parameterType="Student"> 
			insert into students(id,name,email)  
			values(#{id},#{name},#{email}) 
		</insert> 
		第二步:创建一个StudentMapper接口
		public interface StudentMapper{ 
			void insertStudent(Student student); 
		} 
		第三步:编写java代码完成插入操作:
		SqlSession session = getSqlSessionFactory().openSession(); 
		StudentMapper mapper = session.getMapper(StudentMapper.class); 
		mapper.insertStudent(student); 

SqlSession接口和sqlSessionFactory接口

SqlSession接口的实现类对象是mybatis中最重要的一个对象,我们可以使用该对象动态获得XxxxMapper.java接口的实现类对象,然后就可以调用到XxxxMapper.java接口中方法所映射的sql语句(在xml文件中配置的sql语句)。
sqlSessionFactory接口的实现类对象是一个工厂对象,专门负责来产生SqlSession对象的
例如:
InputStream inputStream = Resources.getResourceAsStream(“mybatis-config.xml”);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();

	//第一种执行sql语句的方式  通过XxxxMapper接口的实现类对象来调用
	//动态获得XxxxMapper接口的实现类
	StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
	studentMapper.insertStudent(new Student(1,"tom","123@.qq.com"));
	
	//第二种执行sql语句的方式  执行调用XxxxMapper.xml中写好的sql语句
	//也可以【不通过】Mapper接口执行映射的SQL
	//然而,使用 Mapper接口是最佳实践
	//sqlSession.selectOne("com.briup.pojo.StudentMapper.findStudentById",1);

Student实例

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> 
	  <typeAliases> 
		<typeAlias alias="Student" type="pojo.Student" /> 
	  </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/Student" /> 
			<property name="username" value="root" /> 
			<property name="password" value="root" />
		  </dataSource> 
		</environment> 
	  </environments> 
	  
	  <mappers> 
		<mapper resource="mappers/StudentMapper.xml" /> 
	  </mappers> 
	</configuration> 
	
	

Student.java

package pojo;

public class Student {
	private String Son;
	private String Sname;
	private String Ssex;
	private int Sage;
	private String Sdept;
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public String getSon() {
		return Son;
	}
	public void setSon(String son) {
		Son = son;
	}
	public String getSname() {
		return Sname;
	}
	public void setSname(String sname) {
		Sname = sname;
	}
	public String getSsex() {
		return Ssex;
	}
	public void setSsex(String ssex) {
		Ssex = ssex;
	}
	public int getSage() {
		return Sage;
	}
	public void setSage(int sage) {
		Sage = sage;
	}
	public String getSdept() {
		return Sdept;
	}
	public void setSdept(String sdept) {
		Sdept = sdept;
	}
	@Override
	public String toString() {
		return "Student [Son=" + Son + ", Sname=" + Sname + ", Ssex=" + Ssex + ", Sage=" + Sage + ", Sdept=" + Sdept
				+ "]";
	}

}

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="mappers.StudentMapper"> 
	
	  <resultMap type="Student" id="StudentResult"> 
		<id property="Son" column="Son" /> 
		<result property="Sname" column="Sname" /> 
		<result property="Ssex" column="Ssex" /> 
		<result property="Sage" column="Sage" /> 
		<result property="Sdept" column="Sdept" /> 
	  </resultMap> 
	  
	  <select id="findAllStudents" resultMap="StudentResult"> 
			select * from student 
	  </select> 
	  
	  <select id="findStudentBySon" parameterType="int" resultType="Student"> 
		 select *
		 from students where Son=#{Son} 
	  </select> 
	  
	  <insert id="insertStudent" parameterType="Student"> 
		 insert into student(Son,Sname,Ssex,Sage,Sdept) values(#{Son},#{Sanme},#{Ssex},#{Sage},#{Sdept}) 
	  </insert> 
	</mapper> 

StudentMapper.java

package mappers;

import java.util.List;

import pojo.Student;

/*
 * 映射接口
 * */
//创建映射器Mapper接口StudentMapper
//方法名和StudentMapper.xml中定义的SQL映射定义名相同
//这个其实就是dao层接口(数据访问层,负责和数据库进行交互)
public interface StudentMapper {
	List<Student> findAllStudents();
	Student findStudentBySon(int Son);
	void insertStudent(Student student);
}

测试(采用junit)

package test;

import java.io.InputStream;
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 org.junit.Test;

import mappers.StudentMapper;
import pojo.Student;
import utils.MyBatisSqlSessionFactory;

public class StudentMapperTest {
	@Test
	public void test(){
		try {
			InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); 
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			
			StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
			
			List<Student> stu = studentMapper.findAllStudents();
			
			stu.forEach(System.out::println);
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

在这里插入图片描述

封装生成SqlSession对象

MyBatisSqlSessionFactory.java

package utils;

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;

/*
 * 封装生产SqlSessio对象
 * */
public class MyBatisSqlSessionFactory {
	//静态属性SqlSessionFactory对象
	private static SqlSessionFactory sqlSessionFactory;
	
	//静态方法,返回SqlSessionFactory对象
	public static SqlSessionFactory getSqlSessionFactory(){
		if(sqlSessionFactory == null){
			InputStream inputStream = null;
			try {
				//读取配置文件,创建SqlSessionFactory对象
				inputStream = Resources.getResourceAsStream("mybatis-config.xml"); 
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			} catch (IOException e) {
				e.printStackTrace();
				throw new RuntimeException(e.getCause());
			}
		}
		return sqlSessionFactory;
	}
	
	//创建SqlSession对象,默认不自动提交事务
	public static SqlSession openSession() { 
		return openSession(false); 
	}
	
	//创建SqlSession对象,autoCommit控制事务提交
	public static SqlSession openSession(boolean autoCommit) { 
		return getSqlSessionFactory().openSession(autoCommit); 
	}
}

测试(采用junit)

package test;

import java.io.InputStream;
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 org.junit.Test;

import mappers.StudentMapper;
import pojo.Student;
import utils.MyBatisSqlSessionFactory;

public class StudentMapperTest {
	@Test
	public void test_utils(){
		
		try {
			SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
			
			StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
			List<Student> stu = studentMapper.findAllStudents();
			
			stu.forEach(System.out::println);
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CaoPengCheng&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值