网站建设 有哪些费用,乌克兰网站设计,软件项目管理书籍推荐,thinkphp手机网站开发一、原始DAO开发问题 Dao接口实现类方法中存在大量模板方法#xff0c;设想能否将这些代码提取出来#xff0c;大大减轻程序员的工作 量。   调用sqlSession的数据库操作方法需要指定statement的id#xff0c;这里存在硬编码#xff0c;不利于开发维护。   调用SqlSession方…一、原始DAO开发问题 Dao接口实现类方法中存在大量模板方法设想能否将这些代码提取出来大大减轻程序员的工作 量。   调用sqlSession的数据库操作方法需要指定statement的id这里存在硬编码不利于开发维护。   调用SqlSession方法时传入的变量由于SqlSession方法使用泛型即使变量类型传入错误在编译阶段也不报错不利于程序员开发。 
注原始Dao开发和我们Web阶段讲解的Dao开发基本类似都是有Dao接口和Dao实现类无非 Web阶段的Dao实现类中通过DBUtils来操作SQL现在Mybatis的原始Dao开发把SQL分离出去 了写在的XML映射文件里面而已。 
二、Mapper代理方式 
Mapper代理开发方式只需要程序员编写Mapper接口相当于Dao接口由MyBatis框架根据接口定义创建接口的动态代理对象代理对象的方法体同上边Dao接口实现类方法。 程序员编写Mapper接口需要遵循一些开发规范MyBatis可以自动生成Mapper接口实现类代理对象。 
一、开发规范 
1、Mapper.xml文件中的namespace与mapper接口的类路径相同。 2、Mapper.xml中定义的每个标签的id与Mapper接口方法名相同。 3、Mapper.xml中定义的每个sql的parameterType的类型与Mapper接口方法的参数类型相同。 4、Mapper.xml中定义的每个sql的resultType的类型与Mapper接口方法返回值类型相同。 
注Mapper.xml映射文件最好和Mapper接口名称一致。 
环境搭建和之前的一样。 
二、实体类 
package org.example.entity;import java.util.Date;public class Emp {private Integer empno;private String ename;private String job;private Integer mgr;private Date hiredate;private Double sal;private Double comm;private Integer deptno;public Integer getEmpno() {return empno;}public void setEmpno(Integer empno) {this.empno  empno;}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 Integer getMgr() {return mgr;}public void setMgr(Integer mgr) {this.mgr  mgr;}public Date getHiredate() {return hiredate;}public void setHiredate(Date hiredate) {this.hiredate  hiredate;}public Double getSal() {return sal;}public void setSal(Double sal) {this.sal  sal;}public Double getComm() {return comm;}public void setComm(Double comm) {this.comm  comm;}public Integer getDeptno() {return deptno;}public void setDeptno(Integer deptno) {this.deptno  deptno;}Overridepublic String toString() {return Emp{ empno  empno , ename  ename  \ , job  job  \ , mgr  mgr , hiredate  hiredate , sal  sal , comm  comm , deptno  deptno };}
}三、Mapper接口 
package org.example.mapper;import org.example.entity.Emp;import java.util.List;
//Mapper接口相当于我们之前写的Dao接口只是在Mybatis里面我们习惯这么写而已
public interface EmpMapper {ListEmp select();Emp selectById(Integer empno);void insert(Emp emp);int update(Emp emp);boolean delete(Integer empno);
}批量查询方法返回值为List类型表示SqlSession对象将调用selectList()方法。 单条查询方法返回值为单个实体对象表示SqlSession对象将调用selectOne()方法。 增删改 方法返回值为void表示SqlSession对象中insertupdatedelete方法的返回值不做任何处理。     方法返回值为int类型表示SqlSession对象中insertupdatedelete方法的返回值直接返 回。    方法返回值为boolean类型表示根据SqlSession对象中的insertupdatedelete方法返回 值影响数据库的条数判断操作是否成功如果影响数据库的条数大于0条表示成功否 则表示失败。 
(四、mapper文件 
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
!--namespace与Mapper接口的全限定名保持一致--
mapper namespaceorg.example.mapper.EmpMapper!--statementId与Mapper接口的方法名称保持一致parameterType的类型必须与方法的参数类型保持一致resultType的类型必须与方法的返回值类型保持一致--select idselect resultTypeorg.example.entity.Empselect empno,ename,job,mgr,hiredate,sal,comm,deptno from emp/selectselect idselectById parameterTypejava.lang.IntegerresultTypeorg.example.entity.Empselect empno,ename,job,hiredate,mgr,sal,comm,deptno from emp whereempno#{empno}/selectinsert idinsert parameterTypeorg.example.entity.Empinsert into emp(ename,job,mgr,hiredate,sal,comm,deptno)values(#{ename},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{deptno})/insertupdate idupdate parameterTypeorg.example.entity.Empupdate emp setename#{ename},job#{job},mgr#{mgr},hiredate#{hiredate},sal#{sal},comm#{comm},deptno#{deptno}where empno#{empno}/updatedelete iddelete parameterTypejava.lang.Integerdelete from emp where empno#{empno}/delete
/mapper 五、utils工具类 
package org.example.utils;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 java.io.IOException;
import java.io.InputStream;public class MybatisUtil {private MybatisUtil(){}private static SqlSessionFactory sqlSessionFactory;static {//1.创建读取全局配置文件的流try {InputStream is  Resources.getResourceAsStream(mybatis-config.xml);//2、获取SqlSessionFactorysqlSessionFactory  new SqlSessionFactoryBuilder().build(is);} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession getSession(){sqlSessionFactory.openSession();return sqlSessionFactory.openSession();}}六、、测试 
import com.gs.entity.Emp;
import com.gs.mapper.EmpMapper;
import com.gs.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.Date;
import java.util.List;
public class MapperTest {
private SqlSession sqlSession;
private EmpMapper empMapper;
Before
public void before() {
sqlSession  MybatisUtil.getSession();
//获取Mapper接口的代理对象
empMapper  sqlSession.getMapper(EmpMapper.class);
}
After
public void after() {
sqlSession.commit();
sqlSession.close();
}
Test
public void test() {
System.out.println(sqlSession);
System.out.println(empMapper);
}
Test
public void testSelect() {
ListEmp list  empMapper.select();
for (Emp emp : list) {
System.out.println(emp);
}
}
Test
public void testSelectById() {
Emp emp  empMapper.selectById(7938);
System.out.println(emp);
}
Test
public void testInsert() {
Emp emp  new Emp();
emp.setEname(小明);
emp.setJob(职员);
emp.setSal(4500.0);
emp.setComm(1000.0);
emp.setMgr(1);
emp.setHiredate(new Date());
empMapper.insert(emp);
}
Test
public void testUpdate() {
Emp emp  new Emp();
emp.setEmpno(7940);
emp.setEname(小李);
emp.setJob(秘书);
emp.setSal(5300.0);
emp.setComm(1300.0);
emp.setMgr(1);
emp.setHiredate(new Date());
int result  empMapper.update(emp);
System.out.println(方法的返回值  result);
}
Test
public void testDelete() {
boolean result  empMapper.delete(7940);
System.out.println(方法的返回值  result);
}
}Mybatis官方推荐使用mapper代理方式开发mapper接口程序员不用编写mapper接口实现类使用mapper代理方法时输入参数可以使用pojo包装对象或map对象保证dao的通用性。 文章转载自: http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn http://www.morning.lpskm.cn.gov.cn.lpskm.cn http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn http://www.morning.rkfxc.cn.gov.cn.rkfxc.cn http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn http://www.morning.tgmfg.cn.gov.cn.tgmfg.cn http://www.morning.hmsong.com.gov.cn.hmsong.com http://www.morning.frfpx.cn.gov.cn.frfpx.cn http://www.morning.qdmdp.cn.gov.cn.qdmdp.cn http://www.morning.bxyzr.cn.gov.cn.bxyzr.cn http://www.morning.nzqqd.cn.gov.cn.nzqqd.cn http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn http://www.morning.jgcyn.cn.gov.cn.jgcyn.cn http://www.morning.ffksr.cn.gov.cn.ffksr.cn http://www.morning.ygxf.cn.gov.cn.ygxf.cn http://www.morning.njhyk.cn.gov.cn.njhyk.cn http://www.morning.vjwkb.cn.gov.cn.vjwkb.cn http://www.morning.ckrnq.cn.gov.cn.ckrnq.cn http://www.morning.jtkfm.cn.gov.cn.jtkfm.cn http://www.morning.xrwsg.cn.gov.cn.xrwsg.cn http://www.morning.tkxyx.cn.gov.cn.tkxyx.cn http://www.morning.clbgy.cn.gov.cn.clbgy.cn http://www.morning.qmwzz.cn.gov.cn.qmwzz.cn http://www.morning.znlhc.cn.gov.cn.znlhc.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.wphzr.cn.gov.cn.wphzr.cn http://www.morning.qdrrh.cn.gov.cn.qdrrh.cn http://www.morning.duqianw.com.gov.cn.duqianw.com http://www.morning.zlqyj.cn.gov.cn.zlqyj.cn http://www.morning.fkyqm.cn.gov.cn.fkyqm.cn http://www.morning.hqlnp.cn.gov.cn.hqlnp.cn http://www.morning.hbhnh.cn.gov.cn.hbhnh.cn http://www.morning.ttaes.cn.gov.cn.ttaes.cn http://www.morning.lpnpn.cn.gov.cn.lpnpn.cn http://www.morning.qsmmq.cn.gov.cn.qsmmq.cn http://www.morning.sjwws.cn.gov.cn.sjwws.cn http://www.morning.gglhj.cn.gov.cn.gglhj.cn http://www.morning.pzpj.cn.gov.cn.pzpj.cn http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn http://www.morning.fwnyz.cn.gov.cn.fwnyz.cn http://www.morning.jcnmy.cn.gov.cn.jcnmy.cn http://www.morning.mqpdl.cn.gov.cn.mqpdl.cn http://www.morning.bzjpn.cn.gov.cn.bzjpn.cn http://www.morning.jrrqs.cn.gov.cn.jrrqs.cn http://www.morning.mdjzydr.com.gov.cn.mdjzydr.com http://www.morning.xhddb.cn.gov.cn.xhddb.cn http://www.morning.0dirty.cn.gov.cn.0dirty.cn http://www.morning.qxmnf.cn.gov.cn.qxmnf.cn http://www.morning.kntsd.cn.gov.cn.kntsd.cn http://www.morning.ysskn.cn.gov.cn.ysskn.cn http://www.morning.fthcn.cn.gov.cn.fthcn.cn http://www.morning.mywmb.cn.gov.cn.mywmb.cn http://www.morning.zcxjg.cn.gov.cn.zcxjg.cn http://www.morning.btqqh.cn.gov.cn.btqqh.cn http://www.morning.cwrpd.cn.gov.cn.cwrpd.cn http://www.morning.jzkqg.cn.gov.cn.jzkqg.cn http://www.morning.dmtld.cn.gov.cn.dmtld.cn http://www.morning.kcsx.cn.gov.cn.kcsx.cn http://www.morning.jtnph.cn.gov.cn.jtnph.cn http://www.morning.lwqst.cn.gov.cn.lwqst.cn http://www.morning.lcxzg.cn.gov.cn.lcxzg.cn http://www.morning.cftkz.cn.gov.cn.cftkz.cn http://www.morning.bmts.cn.gov.cn.bmts.cn http://www.morning.jtybl.cn.gov.cn.jtybl.cn http://www.morning.yrhd.cn.gov.cn.yrhd.cn http://www.morning.xysxj.com.gov.cn.xysxj.com http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.wtnwf.cn.gov.cn.wtnwf.cn http://www.morning.tbcfj.cn.gov.cn.tbcfj.cn http://www.morning.kwz6232.cn.gov.cn.kwz6232.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.drnfc.cn.gov.cn.drnfc.cn http://www.morning.rdfq.cn.gov.cn.rdfq.cn http://www.morning.qsmdd.cn.gov.cn.qsmdd.cn http://www.morning.fgxws.cn.gov.cn.fgxws.cn http://www.morning.spftz.cn.gov.cn.spftz.cn http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn http://www.morning.gllgf.cn.gov.cn.gllgf.cn http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn