日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis总结

發(fā)布時間:2024/3/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.什么是Mybatis?

MyBatis是一個優(yōu)秀的持久層框架,它對jdbc操作數(shù)據(jù)庫的過程進(jìn)行封裝,使開發(fā)者只需要關(guān)注 SQL 本身,而不需要花費(fèi)精力去處理例如注冊驅(qū)動、創(chuàng)建connection、創(chuàng)建statement、手動設(shè)置參數(shù)、結(jié)果集檢索等jdbc繁雜的過程代碼。

Mybatis通過xml或注解的方式將要執(zhí)行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,并通過java對象和statement中的sql進(jìn)行映射生成最終執(zhí)行的sql語句,最后由mybatis框架執(zhí)行sql并將結(jié)果映射成java對象并返回。

2.為什么需要Mybatis?

幫助程序員將數(shù)據(jù)存入到數(shù)據(jù)庫中。

方便:

傳統(tǒng)的JDBC代碼太復(fù)雜了。簡化、框架、自動化。

不用Mybatis也可以。更容易上手。

優(yōu)點(diǎn):

簡單易學(xué)靈活

sql和代碼的分離,提高了可維護(hù)性。

提供映射標(biāo)簽,支持對象與數(shù)據(jù)庫的orm字段關(guān)系映射

提供對象關(guān)系映射標(biāo)簽,支持對象關(guān)系組建維護(hù)

提供xml標(biāo)簽,支持編寫動態(tài)sql。

  • 單表的增刪改查

代碼

1.創(chuàng)建測試的數(shù)據(jù)庫

use mydb; CREATE TABLE classInfo( cid int primary key auto_increment, cname varchar(20), cinfo varchar(20) ); INSERT INTO classInfo(cname,cinfo) VALUES('移動212','普通班級'); INSERT INTO classInfo(cname,cinfo) VALUES('移動213','優(yōu)秀班級'); INSERT INTO classInfo(cname,cinfo) VALUES('移動214','優(yōu)秀班級'); SELECT *FROM classInfo;

2.創(chuàng)建一個Java項(xiàng)目并導(dǎo)入mybatis框架的jar包(在項(xiàng)目中創(chuàng)建一個lib文件夾放入mybatis框架的jar包,并導(dǎo)入項(xiàng)目中)

3.創(chuàng)建跟表對應(yīng)的實(shí)體類(在src中創(chuàng)建com.yun.bean包,然后創(chuàng)建User實(shí)體類)

package com.yun.bean;public class User {private Integer cid;private String cname;private String cinfo;public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public String getCinfo() {return cinfo;}public void setCinfo(String cinfo) {this.cinfo = cinfo;}@Overridepublic String toString() {return "User{" +"cid=" + cid +", cname='" + cname + '\'' +", cinfo='" + cinfo + '\'' +'}';} }

4.創(chuàng)建針對表操作的接口類(在src中創(chuàng)建com.yun.dao包,然后創(chuàng)建UserDao的接口,然后在接口中定義針對數(shù)據(jù)庫的增刪改查等操作 )

package com.yun.dao;import com.yun.bean.User;import java.util.List;public interface UserDao {//根據(jù)id查詢User selectByuid(int cid);//全查List<User> selectAll();//添加int add(User user);//刪除int delete(int cid);//修改int update(User user);}

5.在接口的包中創(chuàng)建對應(yīng)的mapper映射配置文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yun.dao.UserDao"><select id="selectByuid" resultType="com.yun.bean.User">select * from classInfo where cid=#{cid};</select><select id="selectAll" resultType="com.yun.bean.User">select *from classInfo;</select><insert id="add" parameterType="com.yun.bean.User">insert into classInfo(cname,cinfo) values(#{cname},#{cinfo});</insert><delete id="delete" parameterType="int">delete from classInfo where cid=#{cid};</delete><update id="update" parameterType="com.yun.bean.User">update classInfo set cname=#{cname},cinfo=#{cinfo}where cid=#{cid};</update></mapper>

6.在src目錄中創(chuàng)建mybatis框架的核心配置文件(打印日志輸出)

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!--配置屬性集,下面需要讀取配置文件key對應(yīng)的value--><properties resource="jdbc.properties" /><settings><!--配置項(xiàng)目使用log4j的日志輸出--><setting name="logImpl" value="log4j"/></settings><typeAliases><!-- <typeAlias type="com.qi.bean.User" alias="user"></typeAlias>--><!-- <typeAlias type="java.lang.String" alias="string"></typeAlias>--><!--加載com.qi.bean包中所有的類,給類默認(rèn)起別名為類的名字但首字母小寫--><package name="com.yun.bean"/></typeAliases><environments default="mysql"><environment id="mysql"><transactionManager type="jdbc"></transactionManager><dataSource type="pooled"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.user}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><package name="com.yun.dao"/></mappers> </configuration>

7.寫入外部插件(在src里面創(chuàng)建log4j.properties)

log4j.rootLogger=TRACE,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=wocao.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n log4j.logger.mapperNS =TRACElog4j.logger.com.mybatis=DEBUG log4j.logger.com.mybatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.mybatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.org.springframework=error log4j.logger.org.apache=ERROR log4j.logger.org.mybatis=DEBUG

8.在src里面創(chuàng)建jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mydb jdbc.user=root jdbc.password=root

9.在測試類中進(jìn)行測試 (書寫代碼)

package com.yun.test;import com.yun.bean.Stu; import com.yun.bean.User; import com.yun.dao.UserDao; 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.After; import org.junit.Before; import org.junit.Test;import java.io.IOException; import java.io.InputStream; import java.util.List;public class UserText {InputStream stream=null;//字節(jié)輸入流SqlSessionFactoryBuilder builder=null;//構(gòu)建器對象SqlSessionFactory factory=null;//工廠對象SqlSession sqlSession=null;//sqlSession對象,用來完成jdbc操作UserDao userDao=null;//接口對接@Beforepublic void init() throws IOException {stream= Resources.getResourceAsStream("mybatis.xml");builder=new SqlSessionFactoryBuilder();factory=builder.build(stream);sqlSession=factory.openSession();//根據(jù)類型創(chuàng)建對應(yīng)的代理對象userDao=sqlSession.getMapper(UserDao.class);}//根據(jù)id查詢@Testpublic void textselectByid(){User user=userDao.selectByuid(2);System.out.println(user);}//全查@Testpublic void textselectAll(){List<User> userList=userDao.selectAll();for (User user:userList){System.out.println(user);}}//添加@Testpublic void textadd() {User user=new User();user.setCname("xx");user.setCinfo("xx");int n=userDao.add(user);if(n>0){System.out.println("添加成功");}}//刪除@Testpublic void textdelete(){int del=userDao.delete(5);if (del>0){System.out.println("刪除成功");}}//修改@Testpublic void textupdate(){User oldUser =userDao.selectByuid(3);System.out.println("修改前:"+oldUser);oldUser.setCname("移動214");oldUser.setCinfo("優(yōu)秀班級");userDao.update(oldUser);User newUser=userDao.selectByuid(3);System.out.println("修改后:"+newUser);}@Afterpublic void distory() throws IOException {sqlSession.commit();sqlSession.close();stream.close();} }

10.結(jié)果展示

  • 全查

  • 根據(jù)id查詢

  • 修改

  • 添加

  • 刪除

  • 兩表聯(lián)查 一對一

1.在bean包中創(chuàng)建實(shí)體類

public class Dept {private Integer did;private String dname;private String dinfo;public Integer getDid() {return did;}public void setDid(Integer did) {this.did = did;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getDinfo() {return dinfo;}public void setDinfo(String dinfo) {this.dinfo = dinfo;}@Overridepublic String toString() {return "Dept{" +"did=" + did +", dname='" + dname + '\'' +", dinfo='" + dinfo + '\'' +'}';} }

2.創(chuàng)建接口DeptDao實(shí)現(xiàn)根據(jù)id查詢的接口

public interface DeptDao {Dept selectById(int did); }

3.創(chuàng)建對應(yīng)的mapper映射配置文件

<select id="selectById" parameterType="int" resultType="com.qi.bean.Dept">select * from dept where did=#{did};</select>

4.在EmpDao中進(jìn)行手動查詢關(guān)聯(lián)Dept,根據(jù)did查詢創(chuàng)建查詢id的接口

public interface EmpDao {Emp selectByEid(int eid);} <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace:把配置文件和接口進(jìn)行映射--> <mapper namespace="com.qi.dao.EmpDao"><!--定義手動映射關(guān)系:數(shù)據(jù)庫中字段 和 類的屬性 的映射--><resultMap id="empMap" type="emp"><id property="eid" column="eid"/><result property="ename" column="ename" /><result property="job" column="job" /><result property="sal" column="sal" /><result property="phone" column="phone" /><result property="address" column="address" /><!--一對一的映射配置association:配置emp中 dept對象中的屬性和表字段的對應(yīng)關(guān)系--><association column="did" select="com.qi.dao.DeptDao.selectById" property="dept"></association></resultMap><select id="selectByEid" parameterType="int" resultMap="empMap">select * from emp where eid=#{eid};</select> </mapper>

5.進(jìn)行測試(書寫代碼)

public class EmpTest {InputStream stream = null;SqlSessionFactoryBuilder builder = null;SqlSessionFactory factory = null;SqlSession sqlSession = null;EmpDao empDao= null;@Beforepublic void init() throws IOException {stream = Resources.getResourceAsStream("mybatis.xml");builder = new SqlSessionFactoryBuilder();factory = builder.build(stream);sqlSession = factory.openSession();empDao = sqlSession.getMapper(EmpDao.class);}@Testpublic void testSelectByeid(){Emp emp=empDao.selectByEid(2);System.out.println(emp);}@Afterpublic void destory() throws IOException {sqlSession.commit();sqlSession.close();stream.close();} }

6.結(jié)果展示

  • 兩表聯(lián)查 一對多

1.在Dept中創(chuàng)建集合

public class Dept {private Integer did;private String dname;private String dinfo;//一個部門包含多個員工,一對多關(guān)系就是定義集合List<Emp> emps;public List<Emp> getEmps() {return emps;}public void setEmps(List<Emp> emps) {this.emps = emps;}public Integer getDid() {return did;}public void setDid(Integer did) {this.did = did;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getDinfo() {return dinfo;}public void setDinfo(String dinfo) {this.dinfo = dinfo;}@Overridepublic String toString() {return "Dept{" +"did=" + did +", dname='" + dname + '\'' +", dinfo='" + dinfo + '\'' +", emps=" + emps +'}';} }

2.Emp實(shí)體類

package com.qi.bean;public class Emp {private Integer eid;private String ename;private String job;private double sal;private String phone;private String address;private Integer did;public Integer getDid() {return did;}public void setDid(Integer did) {this.did = did;} //一對一關(guān)系的定義:把外鍵的did 定義為相關(guān)聯(lián)的 對象public Integer getEid() {return eid;}public void setEid(Integer eid) {this.eid = eid;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public double getSal() {return sal;}public void setSal(double sal) {this.sal = sal;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Emp{" +"eid=" + eid +", ename='" + ename + '\'' +", job='" + job + '\'' +", sal=" + sal +", phone='" + phone + '\'' +", address='" + address + '\'' +", did=" + did +'}';} }

3.根據(jù)did一對多查詢在Dept接口中創(chuàng)建selectById方法

public interface DeptDao {Dept selectById(int did); }

4.創(chuàng)建對應(yīng)的mapper映射配置文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace:把配置文件和接口進(jìn)行映射--> <mapper namespace="com.qi.dao.DeptDao"><resultMap id="deptMap" type="com.qi.bean.Dept"><id property="did" column="did"/><id property="dname" column="dname"/><id property="dinfo" column="dinfo"/><!--配置一對多關(guān)系:自動根據(jù)did去關(guān)聯(lián)查詢emp表中該did的信息--><collection column="did" select="com.qi.dao.EmpDao.selectByDid" property="emps"></collection></resultMap><select id="selectById" parameterType="int" resultMap="deptMap">select * from dept where did=#{did};</select> </mapper>

5.把查詢的Dept中的值賦值給emps集合中 根據(jù)EmpDao中的did查詢進(jìn)行兩表查詢

public interface EmpDao {Emp selectByDid(int did); }

6.對應(yīng)的mapper映射配置文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace:把配置文件和接口進(jìn)行映射--> <mapper namespace="com.qi.dao.EmpDao"><!--定義手動映射關(guān)系:數(shù)據(jù)庫中字段 和 類的屬性 的映射--><select id="selectByDid" resultType="com.qi.bean.Emp">select * from emp where did=#{did};</select> </mapper>

7.進(jìn)行測試(書寫代碼)

public class DeptTest {InputStream stream = null;SqlSessionFactoryBuilder builder = null;SqlSessionFactory factory = null;SqlSession sqlSession = null;DeptDao deptDao= null;@Beforepublic void init() throws IOException {stream = Resources.getResourceAsStream("mybatis.xml");builder = new SqlSessionFactoryBuilder();factory = builder.build(stream);sqlSession = factory.openSession();deptDao = sqlSession.getMapper(DeptDao.class);}@Testpublic void testSelectByDid(){Dept dept = deptDao.selectById(101);System.out.println(dept);}@Afterpublic void destory() throws IOException {sqlSession.commit();sqlSession.close();stream.close();} }

8.結(jié)果展示

總結(jié)

以上是生活随笔為你收集整理的mybatis总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。