`
小小虾
  • 浏览: 13280 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MyBatis 初探

阅读更多

话说很早以前就知道ibatis是一个ORM—对象关系映射框架,以前一直使用的是hibernate,所以也没去实际感受一下他的魅力之所在~~现在有个项目用到了MyBatis,所以就特来感受一番。
@@需要准备的jar包:mybatis-3.0.5.jar和sqljdbc.jar

下面开始我们的项目:
1、第一步:建立数据库studentDB,建表StudentInfo,具体的建表语句就不写了,比较简单。
2、第二步:创建工程

3、第三步:导入jar包(mybatis-3.0.5.jar和sqljdbc.jar)

4、第四步:编写MyBatis主配置文件—可以自定义名字。我在这里延续ibatis的传统使用SqlMapConfig.xml(类似于hibernate中的hibernate.cfg.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.up.StudentInfo" alias="StudentInfo"/>
	</typeAliases>
	<environments default="development"> 
		<environment id="development"> 
			<transactionManager type="JDBC"/> 
				<dataSource type="POOLED"> 
					<property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> 
					<property name="url" value="jdbc:sqlserver://localhost:1433;databasename=studentDB"/> 
					<property name="username" value="sa"/> 
					<property name="password" value="123456"/> 
				</dataSource> 
		</environment> 
	</environments> 
	<mappers> 
		<mapper resource="studentMapper.xml"/> 
	</mappers> 
</configuration> 

5、第五步:配置数据库表映射文件:studentMapper.xml(类似于hiberante中的.hbm.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">	
<!--这里namespace必须配置为StudentMapper接口的路径,否则运行时会报“is not known to the MapperRegistry”
-->
<mapper namespace="com.up.StudentMapper">
     <!-- 这里必须配置resultMap,否则在selectBoy中,将报null错误,无法将数据库中的值注入到StudentInfo类中-->
      <resultMap type="StudentInfo" id="boys">
		<id property="stuid" column="stuid"/>
		<result property="stuname" column="stuname" />
		<result property="stusex" column="stusex" />
		<result property="stuscore" column="stuscore" />
		<result property="stuage" column="stuage" />
	</resultMap>
	<select id="selectBoy" parameterType="string" resultMap="boys" resultType="arraylist">
		select * from StudentInfo where stusex = #{stusex}
	</select>
        <!--这里的id必须配置和StudentMapper中的方法一样,否则也会报错。下面也一样道理-->
        <select id="selectByID" parameterType="int" resultType="StudentInfo">
		select * from StudentInfo where stuid = #{stuid} 
	</select>
	<insert id="addStudent" parameterType="StudentInfo" useGeneratedKeys="true">
		insert into StudentInfo(stuname,stusex,stuscore,stuage)
		values(#{stuname},#{stusex},#{stuscore},#{stuage})
	</insert>
	<update id="updateStudent" parameterType="StudentInfo">
		update StudentInfo 
			set stuname=#{stuname},stusex=#{stusex},stuscore=#{stuscore}
		where stuid=#{stuid}
	</update>
	<delete id="deleteStudent" parameterType="int">
		delete from StudentInfo where stuid = #{stuid} 
	</delete>
</mapper>

6、第六步:编写java代码

StudentInfo实体类的代码如下:

package com.up;
public class StudentInfo {
	private int stuid;
	private String stuname;
	private String stusex;
	private double stuscore;
	private int stuage;
	public StudentInfo(){
		super();
	}
	public StudentInfo(int stuid,String stuname,String stusex,double stuscore,int stuage){
		super();
		this.stuid = stuid;
		this.stuname = stuname;
		this.stusex = stusex;
		this.stuscore = stuscore;
		this.stuage = stuage;
	}
	public void setStuid(int stuid) {
		this.stuid = stuid;
	}
	public int getStuid() {
		return stuid;
	}
	public int getStuage() {
		return stuage;
	}
	public String getStuname() {
		return stuname;
	}
	public double getStuscore() {
		return stuscore;
	}
	public String getStusex() {
		return stusex;
	}
	public void setStuage(int stuage) {
		this.stuage = stuage;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}
	public void setStuscore(double stuscore) {
		this.stuscore = stuscore;
	}
	public void setStusex(String stusex) {
		this.stusex = stusex;
	}
	public String toString(){
		return "学号:"+this.getStuid()+" 姓名:"+this.getStuname()+" 性别:"+this.getStusex()+
				" 年龄:"+this.getStuage()+" 分数:"+this.getStuscore();
	}
}

StudentInfo实体的映射器取名为:StudentMapper(接口),其代码如下:

package com.up;
import java.util.ArrayList;

public interface StudentMapper {
	//这里的方法对应了studentMapper.xml中的select,update,delete语句
	public ArrayList<StudentInfo> selectBoy(String male); 
	public StudentInfo selectByID(int id);
	public void addStudent(StudentInfo student);
	public void updateStudent(StudentInfo student);
	public void deleteStudent(int id);
}

注意: 该接口类似于hibernate中的dao层接口,只是该接口只需要声明,不需要实现。

据我所知:在MyBatis中不声明该接口也是可以的。也许这是一个约定俗成的东西。所以最好定义一下。

 

加载配置文件得到SqlSessionFactory工具类代码:

package com.up;

import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	private static final SqlSessionFactory factory;
	static {
		String resource = "SqlMapConfig.xml";
		Reader reader = null;
		try {
			reader = Resources.getResourceAsReader(resource);
		} catch (Exception e) {
			e.printStackTrace();
		}
		factory = new SqlSessionFactoryBuilder().build(reader);
	}
	
	public static SqlSessionFactory getSqlSessionFactory(){
		return factory;
	}
	
}

主要的测试类,该类只是用于测试,所以各方法定义的不是那么灵活,可扩展。

package com.up;

import java.io.Reader;
import java.util.ArrayList;
import java.util.Iterator;
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;

/**
 * 在该类中,主要定义了几个方法,用来测试XML文件中的insert,update,delete,select语句
 * addStudent()方法对应了studentMapper.xml中的addStudent操作
 * getBoys()方法对应了studentMapper.xml中的selectBoy操作
 * getStudent()方法对应了studentMapper.xml中的selectByID操作
 * delStudent()方法对应了studentMapper.xml中的deleteStudent操作
 * updateStudent()方法对应了studentMapper.xml中的updateStudent操作
 * 
 * @author 小小虾
 *
 */
public class TestMybatis {
	
        private static SqlSessionFactory factory = null;
	static {
		factory = MyBatisUtil.getSqlSessionFactory();
	}
	
	public void addStudent(){
		SqlSession session = factory.openSession();
		StudentInfo student = new StudentInfo();
		student.setStuname("王王王");
		student.setStuid(00001);
		student.setStusex("男");
		student.setStuscore(88);
		student.setStuage(19);
		try {
			session.selectOne("StudentMapper.addStudent", student);
			session.commit();
		} finally {
			session.close();
		}
	}
	public void getBoys(){
		
                SqlSession session = factory.openSession();
		try {
			StudentMapper mapper = session.getMapper(StudentMapper.class);
			ArrayList list = mapper.selectBoy("男");
			for(int i=0;i<list.size();i++){
				StudentInfo stu = (StudentInfo)list.get(i);
				System.out.println(stu);
			}
		} finally {
			session.close();
		}
	}
	public void getStudent(){
		
                SqlSession session = factory.openSession();
		try {
			StudentMapper mapper = session.getMapper(StudentMapper.class);
			StudentInfo stu = mapper.selectByID(10018);
			System.out.println("信息:"+stu);
		} finally {
			session.close();
		}
	}
	public void delStudent(){
		
		SqlSession session = factory.openSession();
		try {
			StudentMapper mapper = session.getMapper(StudentMapper.class);
			mapper.deleteStudent(10018);
			session.commit();
		} finally {
			session.close();
		}
	}
	public void updateStudent(){
		
                SqlSession session = factory.openSession();
		StudentInfo student = new StudentInfo();
		student.setStuname("swu");
		student.setStuid(10006);
		student.setStusex("女");
		student.setStuscore(111);
		student.setStuage(100);
		try {
			StudentMapper mapper = session.getMapper(StudentMapper.class);
			mapper.updateStudent(student);
			session.commit();
		} finally {
			session.close();
		}
	}
	public static void main(String[] args) {
		
                TestMybatis m = new TestMybatis();
		m.delStudent();
		m.getStudent();
	}
	
}

注意:

try {
	StudentMapper mapper = session.getMapper(StudentMapper.class);
	mapper.addStudent(student);
} finally {
	session.close();
}

session必须在finally中关闭。

 

 

至此,我的MyBatis初探就告一段落了,在此,要感谢网络上各位大侠。

 

 

 

分享到:
评论

相关推荐

    springmvc+mybatis初探

    《SpringMVC与MyBatis整合初探》 在当今的Java Web开发领域,SpringMVC和MyBatis是两大主流框架,它们分别负责控制层和数据访问层的处理。SpringMVC作为Spring框架的一部分,提供了强大的MVC设计模式实现,而...

    spring+mybatis初探

    在IT行业中,Spring和MyBatis是两个非常重要的框架,它们在Java开发中扮演着核心角色。Spring是一个全面的开源应用框架,而MyBatis则是一个优秀的持久层框架。本篇文章将深入探讨这两个框架的基本概念、工作原理以及...

    mybatis-spring-boot-starter初探 代码.zip

    关于mybatis的spring boot可执行代码,对应的解说博客地址在:https://blog.csdn.net/heidashou/article/details/105812796,含有全过程截图和解说。

    mybatisStudyRecords:记录自己学习mybatis的代码

    code1教程MyBatis学习(一)之初探MyBatis大体结构与简单实现:" 这段描述表明该项目是一个逐步学习的过程,首先从基础开始,涵盖了MyBatis的基本结构和简单实现。MyBatis的架构主要包括三大部分:...

    MyBatisCN:《通用通用阅读指导书——MyBatis源码详解》配套注释版

    在本书的在阅读MyBatis源码的过程中,本书使用了运行初探,模块归类,合理猜测,类比阅读,网格阅读等多种原始码阅读方法,逐步这些原始码阅读方法进行了进一步的总结整理。 本书适合架构师,程序员提升自己的源码...

    初探微服务与Spring Boot

    【初探微服务与Spring Boot】 微服务架构是一种软件开发方法,它将应用程序设计为一组小型、独立的服务,每个服务都专注于一个特定的业务功能,且可以独立部署、扩展和维护。这种架构模式有助于提高软件的可伸缩性...

    基于计算机软件开发的JAVA编程应用初探.zip

    而Spring Data则为与各种数据库交互提供了统一的接口,如JPA和MyBatis。 对于并发编程,Java提供了丰富的线程API,包括Thread类和Runnable接口,以及ExecutorService和Future等高级并发工具。通过合理使用这些工具...

    pring初探共18页.pdf.zip

    很抱歉,根据您提供的信息,"pring初探共18页.pdf.zip" 和 "pring初探共18页.pdf." 看起来像是一个关于Spring框架的教程文档,但是具体的文件列表只提到了 "赚钱项目",这与Spring框架的学习内容不直接相关。...

    SpringMVC精品资源--个人博客,Spring Boot 开山之作,采用 Spring Boot + MyBa.zip

    这个资源集合可能包含了从基础到高级的Spring技术应用,特别强调了Spring Boot的初探。 描述中的“采用 Spring Boot + MyBatis”表明该项目采用了MyBatis作为持久层框架。MyBatis是一个优秀的SQL映射框架,它能够将...

    SpringBlade快速开发手册

    开发初探部分详细介绍了微服务工程的新建过程,包括模块介绍、子工程的创建、版本依赖设置和工程配置等。开发者通过这些步骤可以构建自己的API,以及进行API的安全框架配置、鉴权、统一API响应结果处理等。这一章节...

    C# 通过反射初探ORM框架的实现原理(详解)

    在Java中,我们经常使用Mybatis、Hibernate等ORM框架来实现数据访问层。然而,在C#中,我们可以使用反射机制来实现简单的ORM框架。 什么是反射?反射是指程序可以访问、检测和修改它本身状态或行为的一种能力,并能...

    springboot项目整合.zip

    第七篇:整合Mybatis] 第八篇:通用Mapper与分页插件的集成] 第九篇:整合Lettuce Redis] 第十篇:使用Spring Cache集成Redis] 第十一篇:集成Swagger在线调试] 第十二篇:初探RabbitMQ消息队列] 第十...

    Java Springboot学习资料.rar

    整合Mybatis 通用Mapper与分页插件的集成 整合Lettuce Redis 使用Spring Cache集成Redis 集成Swagger在线调试 初探RabbitMQ消息队列 RabbitMQ延迟队列 actuator 服务监控与管理 actuator与spring-boot-admin 定时...

    JEECG 快速开发指南

    JEECG框架初探** **2.1 演示系统** JEECG提供在线演示系统,让开发者在实际环境中体验平台的各项功能,包括表单生成、报表设计、权限管理等,以便快速理解和学习平台的使用。 **2.2 示例代码** 平台上提供丰富...

    jpcap 比较完成抓包示例.rar

    《基于jpcap的网络数据包捕获与分析系统初探》 在信息技术领域,网络数据包捕获是一项至关重要的任务,它可以帮助我们洞察网络流量,进行故障排查、安全审计和性能优化。本文将深入探讨如何利用Java平台的jpcap库来...

    readMe.pdf

    开发流程方面,介绍了SpringMVC、Swagger、Mybatis、Mybatis-Plus等后端开发常用框架和工具的集成和使用方法。其中,新建微服务、API的创建与鉴权、Redis缓存的集成、CRUD操作的实现等都是开发初探阶段需要掌握的...

    Saber开发手册.pdf

    SpringBlade是由一个商业级项目优化升级而来的Spring Cloud微服务架构,其后端使用Spring Boot 2、Spring Cloud Greenwich、Mybatis等技术栈。BladeX致力于创造一种新的开发模式,并对开发中遇到的问题和生产中的...

    spring 课件下载

    1. **Spring初探** 在这一章中,我们将从Spring框架的基础出发,介绍其诞生背景和主要目标。我们会讲解Spring如何简化Java应用的开发,以及它提供的依赖注入(Dependency Injection, DI)机制,这是Spring的核心...

Global site tag (gtag.js) - Google Analytics