当前位置: 首页 > news >正文

日照网站建设公司二十个优化

日照网站建设公司,二十个优化,陕西企业营销型网站,宁波网站建设服务报价一、原始DAO开发问题 Dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作 量。 调用sqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不利于开发维护。 调用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 {List<Emp> select();Emp selectById(Integer empno);void insert(Emp emp);int update(Emp emp);boolean delete(Integer empno);
}

批量查询:方法返回值为List类型,表示SqlSession对象将调用selectList()方法。
单条查询:方法返回值为单个实体对象,表示SqlSession对象将调用selectOne()方法。
增删改:

    方法返回值为void,表示SqlSession对象中insert,update,delete方法的返回值不做任何处理。
    方法返回值为int类型,表示SqlSession对象中insert,update,delete方法的返回值直接返
回。
   方法返回值为boolean类型,表示根据SqlSession对象中的insert,update,delete方法返回
值(影响数据库的条数)判断操作是否成功,如果影响数据库的条数大于0条,表示成功,否
则表示失败。

(四)、mapper文件

<?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:与Mapper接口的全限定名保持一致-->
<mapper namespace="org.example.mapper.EmpMapper"><!--statementId与Mapper接口的方法名称保持一致;parameterType的类型必须与方法的参数类型保持一致;resultType的类型必须与方法的返回值类型保持一致;--><select id="select" resultType="org.example.entity.Emp">select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp</select><select id="selectById" parameterType="java.lang.Integer"resultType="org.example.entity.Emp">select empno,ename,job,hiredate,mgr,sal,comm,deptno from emp whereempno=#{empno}</select><insert id="insert" parameterType="org.example.entity.Emp">insert into emp(ename,job,mgr,hiredate,sal,comm,deptno)values(#{ename},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{deptno})</insert><update id="update" parameterType="org.example.entity.Emp">update emp setename=#{ename},job=#{job},mgr=#{mgr},hiredate=#{hiredate},sal=#{sal},comm=#{comm},deptno=#{deptno}where empno=#{empno}</update><delete id="delete" parameterType="java.lang.Integer">delete 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() {
List<Emp> 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.khdw.cn/news/27854.html

相关文章:

  • 开发软件公司都有哪些长沙seo排名扣费
  • 会员制网站建设淘宝关键词排名是怎么做的
  • 网站简单设计网址如何被快速收录
  • 网上购物商城数据库设计优化设计四年级上册语文答案
  • 永州网站建设哪里有在线bt种子
  • 哪些做园林的网站网站推广是做什么的
  • 做网站 需要了解什么推广普通话奋进新征程手抄报
  • 超简单做网站软件百度客服人工电话24小时
  • 做营销网站策划有什么前景百度关键词怎么排名
  • 网页制作实训总结800字提供seo服务
  • 网站开发的背景的讲解北京网站优化服务商
  • 塘厦 网站建设 百度推广软文营销范文100字
  • 网站地图wordpress石家庄疫情最新情况
  • 无锡快速建设网站方法怎么打广告吸引客户
  • 中国建设银行官网站住房公积金百度上做推广怎么做
  • 高端定制网站开发网站模板设计seo的优点和缺点
  • 免费ppt模板下载大全网站三只松鼠网络营销策略
  • 专业的丹阳网站建设种子搜索引擎在线
  • 做网站模板的网页名称是m开头重庆做网络优化公司电话
  • 公司网站建设费如何出账2024免费网站推广大全
  • 编程 给别人做网站百度网址
  • 龙岗附近公司做网站建设多少钱品牌策划的五个步骤
  • 动漫电影做英语教学视频网站有哪些百度账号登录入口官网
  • 兰州网站建站seo是指什么
  • 餐饮品牌网站建设sem推广是什么意思呢
  • 汕尾建设网站首页免费发布信息网平台
  • 淄博天一建设项目招标代理有限公司网站百度站长平台如何添加网站
  • 企业网站建设心得合肥网站优化平台
  • 有什么好的网站可以接单子做广告推广免费发布
  • 可做外链的视频网站企业查询