简述Mybatis增删改查实例代码
编写一个简单的mybatis进行插入数据的实例
1 数据库建表 其中建表dob=date of birth 的意思
create table students (stud_id number primary key, name varchar2(20), email varchar2(20), dob date );
oracle数据库中出现表已创建,则表示创建成功,如果出现名称已被使用,则可在建表之前进行删除操作:drop table students;或者进行级联删除drop table students cascade constraints;然后再重新创建
2 新建一个项目
2.1 创建好相应的package及class,其中student是我们要进行插入的对象,由于数据类型和数据库中的值进行了对应,因此我们能够进行将一整个对象进行插入,因此我们使用pojo类进行封装对象
package com.mybatis.pojo; import java.util.date; public class student { private integer studid; private string name; private string email; private date dob; public student() {}//注意无参的构造器 public student(integer studid, string name, string email, date dob) { this.studid = studid; this.name = name; this.email = email; this.dob = dob; } public integer getstudid() { return studid; } public void setstudid(integer studid) { this.studid = studid; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getemail() { return email; } public void setemail(string email) { this.email = email; } public date getdob() { return dob; } public void setdob(date dob) { this.dob = dob; } @override public string tostring() { return "student [studid=" + studid + ", name=" + name + ", email=" + email + ", dob=" + dob + "]"; } }
3 项目中引入mybatis的核心包以及可选的依赖包
文件下载:mybatis包下载
最新版下载:https://github.com/mybatis/mybatis-3/releases
必须的包 mybatis-3.3.0.jar ojdbc14.jar
可选的包 junit-4.7.jar log4j-1.2.17.jar
其中mybatis-3.3.0.jar 用于实现mybatis提供的功能,ojdbc14.jar用于连接数据库,junit-4.7.jar用于实现功能测试,log4j-1.2.17.jar用于进行日志记录
如下图所示:在项目目录下建立一个新的文件夹jar,将需要导入的包进行复制粘贴到jar目录下边
注意:在本地存放这些jar包时不要使用中文
然后再右键选中jar目录下的四个文件,点击添加“buildpath->add path”,就能够看到如下界面:表示添加路径成功
4 项目中引入mybatis配置文件dtd约束文件
同样的,在项目下新建dtd目录,将约束文件复制到目录下即可,如下图所示:dtd文件结构,dtd文件下载:
dtd文件的作用是对配置文件xml进行约束,这样的话程序员就能按照规范书写xml文件,mybatis就能够正确的读取并解析,以上dtd是配置本地的,当然我们也能够使用官网的连接进行约束
5 mybatis中的配置文件和映射文件分别引入到项目中
1) src下面的mybatis-config.xml:
首先我们对本地dtd约束进行关联,如下图进入到preferences下面,在搜索框中输入xml,选中xml catalog配置名,然后点击右边的add按钮
出现如下图所示界面,其中location位置和key位置为空,下图是配置过的,key内容为-//mybatis.org//dtd config 3.0//en,location内容为自己的,可以通过workspace进行选择,也就是我们前面复制到项目中的dtd文件(第4步操作中的):
点击ok,现在我们能够进行xml配置文件的书写,添加约束的作用就是对程序员的书写进行规范,以保证mybatis能够正常解析
如下图所示:选中src右键创建新文件mybatis-config.xml
注意:xml文件开头必须置顶,前面不能有空格
<?xml version="1.0" encoding="utf-8"?> <!-- 进行dtd约束,其中-//mybatis.org//dtd config 3.0//en为公共约束, http://mybatis.org/dtd/mybatis-3-config.dtd为获取网络中提供的dtd约束 --> <!doctype configuration public "-//mybatis.org//dtd config 3.0//en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typealiases> <!-- 给pojo类起别名 --> <typealias type="com.mybatis.pojo.student" alias="student" /> </typealiases> <!-- 配置数据库环境其中development为默认的数据库名称事务管理器transactionmanager类型为jdbc类型,数据源datasource使用连接池的方式 --> <environments default="development"> <environment id="development"> <transactionmanager type="jdbc"></transactionmanager> <datasource type="pooled"> <!-- 配置数据库信息这里使用oracle数据库 --> <property name="driver" value="oracle.jdbc.driver.oracledriver" /> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" /> <property name="username" value="briup" /> <property name="password" value="briup" /> </datasource> </environment> </environments> <!-- 配置xml文件映射路径,在这里可以进行sql的操作 --> <mappers> <mapper resource="com/mybatis/mappers/studentmapper.xml" /> </mappers> </configuration>
2)com.mybatis.mappers包下面的studentmapper.xml:
首先,我们实现接口com.mybatis.mappers;包下面新建一个接口studentmapper.java,用来对应xml文件中的sql语句(映射),从而方便我们调用
package com.mybatis.mappers; import java.util.list; import com.mybatis.pojo.student; public interface studentmapper { list<student> findallstudents(); student findstudentbyid(integer id); void insertstudent(student student); }
使用同样的方法,对mapper文件进行约束
然后进行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"> <!-- com.mybatis.mappers.studentmapper是我们定义接口的全限定名字 这样就可以使用接口调用映射的sql语句了 这个名字一定要和接口对应上 --> <mapper namespace="com.mybatis.mappers.studentmapper"> <resultmap type="student" id="studentresult"> <id property="studid" column="stud_id" /> <result property="name" column="name" /> <result property="email" column="email" /> <result property="dob" column="dob" /> </resultmap> <select id="findallstudents" resultmap="studentresult"> select * from students </select> <!-- 列名和属性名字不一致可以给查询的列起一个别名 --> <select id="findstudentbyid" parametertype="int" resulttype="student"> select stud_id as studid,name,email,dob from students where stud_id=#{id} </select> <insert id="insertstudent" parametertype="student"> insert into students(stud_id,name,email,dob) values(#{studid},#{name},#{email},#{dob}) </insert> </mapper>
*******************************************************
注意:xml文件中写的sql语句,最后面不要写分号,否则会报错误,ora-00911: 无效字符
*******************************************************
6 配置log4j.properties文件中的日志输出:
位置src下面,文件名log4j.properties
内容:
log4j.rootlogger=debug, stdout log4j.appender.stdout=org.apache.log4j.consoleappender log4j.appender.stdout.layout=org.apache.log4j.patternlayout log4j.appender.stdout.layout.conversionpattern=%d [%-5p] %c - %m%n #show sql log4j.logger.java.sql.resultset=info log4j.logger.org.apache=info log4j.logger.java.sql.connection=debug log4j.logger.java.sql.statement=debug log4j.logger.java.sql.preparedstatement=debug
7 创建一个测试类studentmappertest.java
package com.mybatis.test; import java.io.ioexception; import java.io.inputstream; import java.util.date; 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 com.mybatis.mappers.studentmapper; import com.mybatis.pojo.student; public class studentmappertest { @test public void test_insertstudent() { sqlsession session=null; try { // 获取配置文件 inputstream inputstream = resources.getresourceasstream("mybatis-config.xml"); // 生成工厂对象 sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(inputstream); // 使用工厂对象生成sqlsession session = sqlsessionfactory.opensession(); // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象 studentmapper studentmapper = session.getmapper(studentmapper.class); student student = new student(1, "suwu150", "1730@qq.com",new date()); studentmapper.insertstudent(student); } catch (ioexception e) { session.rollback(); e.printstacktrace(); } } }
8 运行成功后会在控制台中看到log4j日志输出的这个程序运行的相关信息,如下:
在数据库中查询能够看到如下信息
9 对mybatis的一些基本封装
每次读取配置文件,产生一个工厂对象sqlsessionfactory,然后再生成出sqlsession对象,这个过程虽然并不复杂,但是也都是一些重复的代码流程,所以我们可以对其进行一个简单的封装:
package com.mybatis.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; public class mybatissqlsessionfactory { private static sqlsessionfactory sqlsessionfactory; public static sqlsessionfactory getsqlsessionfactory(){ if(sqlsessionfactory == null){ inputstream inputstream = null; try { inputstream = resources.getresourceasstream("mybatis-config.xml"); sqlsessionfactory = new sqlsessionfactorybuilder().build(inputstream); } catch (ioexception e) { e.printstacktrace(); throw new runtimeexception(e.getcause()); } } return sqlsessionfactory; } public static sqlsession opensession() { return opensession(false); //默认手动提交,故我们在调用的时候需要进行提交 } public static sqlsession opensession(boolean autocommit) { return getsqlsessionfactory().opensession(autocommit); } }
之后每次使用的时候只需要调用该类中的静态方法opensession即可
上面的代码可简写为: //注意事务是自动提交还是手动提交
mybatissqlsessionfactory.opensession().getmapper(studentmapper.class).insertstudent(s);
10 在上面的测试中,我们仅仅完成了增加的功能,下面我们进行实现删除修改和查询的功能:
在映射文件中进行如下配置:
<?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"> <!-- com.mybatis.mappers.studentmapper是我们定义接口的全限定名字 这样就可以使用接口调用映射的sql语句了 这个名字一定要和接口对应上 --> <mapper namespace="com.mybatis.mappers.studentmapper"> <resultmap type="student" id="studentresult"> <id property="studid" column="stud_id" /> <result property="name" column="name" /> <result property="email" column="email" /> <result property="dob" column="dob" /> </resultmap> <select id="findallstudents" resultmap="studentresult"> select * from students </select> <!-- 列名和属性名字不一致可以给查询的列起一个别名 --> <select id="findstudentbyid" parametertype="int" resulttype="student"> select stud_id as studid,name,email,dob from students where stud_id=#{id} </select> <insert id="insertstudent" parametertype="student"> insert into students(stud_id,name,email,dob) values(#{studid},#{name},#{email},#{dob}) </insert> <delete id="deletestudentbyid" parametertype="int"> delete from students where stud_id=#{id} </delete> <update id="updatestudentbyid" parametertype="student"> update students set name=#{name},email=#{email} where stud_id=#{studid} </update> </mapper>
在接口类中进行如下配置:
package com.mybatis.mappers; import java.util.list; import com.mybatis.pojo.student; public interface studentmapper { list<student> findallstudents(); student findstudentbyid(integer id); void insertstudent(student student); void deletestudentbyid(integer id); void updatestudentbyid(student student); }
在测试文件中编写如下代码:
package com.mybatis.test; import java.io.ioexception; import java.io.inputstream; import java.util.date; 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 com.mybatis.mappers.studentmapper; import com.mybatis.pojo.student; import com.mybatis.utils.mybatissqlsessionfactory; public class studentmappertest { @test public void test_insertstudent() { sqlsession session=null; try { // 获取配置文件 inputstream inputstream = resources.getresourceasstream("mybatis-config.xml"); // 生成工厂对象 sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(inputstream); // 使用工厂对象生成sqlsession session = sqlsessionfactory.opensession(); // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象 studentmapper studentmapper = session.getmapper(studentmapper.class); student student = new student(2, "suwu150", "1730@qq.com",new date()); studentmapper.insertstudent(student); session.commit(); system.out.println("执行完毕"); } catch (ioexception e) { session.rollback(); e.printstacktrace(); } } @test public void test_deletestudentbyid() { sqlsession session=null; session = mybatissqlsessionfactory.opensession();//使用封装之后的类 // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象 studentmapper studentmapper = session.getmapper(studentmapper.class); studentmapper.deletestudentbyid(2); session.commit(); system.out.println("执行完毕"); } @test public void test_updatestudentbyid() { sqlsession session=null; session = mybatissqlsessionfactory.opensession();//使用封装之后的类 // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象 studentmapper studentmapper = session.getmapper(studentmapper.class); student student = new student(); student.setstudid(1); student.setname("sususu"); student.setemail("123443@136.com"); studentmapper.updatestudentbyid(student); session.commit(); system.out.println("执行完毕"); } @test public void test_findstudentbyid() { sqlsession session=null; session = mybatissqlsessionfactory.opensession();//使用封装之后的类 // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象 studentmapper studentmapper = session.getmapper(studentmapper.class); student student = studentmapper.findstudentbyid(1); system.out.println(student); system.out.println("执行完毕"); } @test public void test_findallstudents() { sqlsession session=null; session = mybatissqlsessionfactory.opensession();//使用封装之后的类 // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象 studentmapper studentmapper = session.getmapper(studentmapper.class); list<student> list = studentmapper.findallstudents(); system.out.println(list); system.out.println("执行完毕"); } }
这样我们就完成了对student对象的增删改查
以上所述是小编给大家介绍的mybatis增删改查实例代码,希望对大家有所帮助
推荐阅读
-
简述Mybatis增删改查实例代码
-
编写Java代码对HDFS进行增删改查操作代码实例
-
Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二)
-
Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一)
-
Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一)
-
Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二)
-
编写Java代码对HDFS进行增删改查操作代码实例
-
Android--SQLite(增,删,改,查)操作实例代码
-
java使用DOM对XML文档进行增删改查操作实例代码
-
Android--SQLite(增,删,改,查)操作实例代码