话说很早以前就知道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整合初探》 在当今的Java Web开发领域,SpringMVC和MyBatis是两大主流框架,它们分别负责控制层和数据访问层的处理。SpringMVC作为Spring框架的一部分,提供了强大的MVC设计模式实现,而...
在IT行业中,Spring和MyBatis是两个非常重要的框架,它们在Java开发中扮演着核心角色。Spring是一个全面的开源应用框架,而MyBatis则是一个优秀的持久层框架。本篇文章将深入探讨这两个框架的基本概念、工作原理以及...
关于mybatis的spring boot可执行代码,对应的解说博客地址在:https://blog.csdn.net/heidashou/article/details/105812796,含有全过程截图和解说。
code1教程MyBatis学习(一)之初探MyBatis大体结构与简单实现:" 这段描述表明该项目是一个逐步学习的过程,首先从基础开始,涵盖了MyBatis的基本结构和简单实现。MyBatis的架构主要包括三大部分:...
在本书的在阅读MyBatis源码的过程中,本书使用了运行初探,模块归类,合理猜测,类比阅读,网格阅读等多种原始码阅读方法,逐步这些原始码阅读方法进行了进一步的总结整理。 本书适合架构师,程序员提升自己的源码...
【初探微服务与Spring Boot】 微服务架构是一种软件开发方法,它将应用程序设计为一组小型、独立的服务,每个服务都专注于一个特定的业务功能,且可以独立部署、扩展和维护。这种架构模式有助于提高软件的可伸缩性...
而Spring Data则为与各种数据库交互提供了统一的接口,如JPA和MyBatis。 对于并发编程,Java提供了丰富的线程API,包括Thread类和Runnable接口,以及ExecutorService和Future等高级并发工具。通过合理使用这些工具...
很抱歉,根据您提供的信息,"pring初探共18页.pdf.zip" 和 "pring初探共18页.pdf." 看起来像是一个关于Spring框架的教程文档,但是具体的文件列表只提到了 "赚钱项目",这与Spring框架的学习内容不直接相关。...
这个资源集合可能包含了从基础到高级的Spring技术应用,特别强调了Spring Boot的初探。 描述中的“采用 Spring Boot + MyBatis”表明该项目采用了MyBatis作为持久层框架。MyBatis是一个优秀的SQL映射框架,它能够将...
开发初探部分详细介绍了微服务工程的新建过程,包括模块介绍、子工程的创建、版本依赖设置和工程配置等。开发者通过这些步骤可以构建自己的API,以及进行API的安全框架配置、鉴权、统一API响应结果处理等。这一章节...
在Java中,我们经常使用Mybatis、Hibernate等ORM框架来实现数据访问层。然而,在C#中,我们可以使用反射机制来实现简单的ORM框架。 什么是反射?反射是指程序可以访问、检测和修改它本身状态或行为的一种能力,并能...
第七篇:整合Mybatis] 第八篇:通用Mapper与分页插件的集成] 第九篇:整合Lettuce Redis] 第十篇:使用Spring Cache集成Redis] 第十一篇:集成Swagger在线调试] 第十二篇:初探RabbitMQ消息队列] 第十...
整合Mybatis 通用Mapper与分页插件的集成 整合Lettuce Redis 使用Spring Cache集成Redis 集成Swagger在线调试 初探RabbitMQ消息队列 RabbitMQ延迟队列 actuator 服务监控与管理 actuator与spring-boot-admin 定时...
JEECG框架初探** **2.1 演示系统** JEECG提供在线演示系统,让开发者在实际环境中体验平台的各项功能,包括表单生成、报表设计、权限管理等,以便快速理解和学习平台的使用。 **2.2 示例代码** 平台上提供丰富...
《基于jpcap的网络数据包捕获与分析系统初探》 在信息技术领域,网络数据包捕获是一项至关重要的任务,它可以帮助我们洞察网络流量,进行故障排查、安全审计和性能优化。本文将深入探讨如何利用Java平台的jpcap库来...
开发流程方面,介绍了SpringMVC、Swagger、Mybatis、Mybatis-Plus等后端开发常用框架和工具的集成和使用方法。其中,新建微服务、API的创建与鉴权、Redis缓存的集成、CRUD操作的实现等都是开发初探阶段需要掌握的...
SpringBlade是由一个商业级项目优化升级而来的Spring Cloud微服务架构,其后端使用Spring Boot 2、Spring Cloud Greenwich、Mybatis等技术栈。BladeX致力于创造一种新的开发模式,并对开发中遇到的问题和生产中的...
1. **Spring初探** 在这一章中,我们将从Spring框架的基础出发,介绍其诞生背景和主要目标。我们会讲解Spring如何简化Java应用的开发,以及它提供的依赖注入(Dependency Injection, DI)机制,这是Spring的核心...