ORM

关系数据库需要按对象来处理,出现ORM设置,列对应类的属性,行对应对应类的实例,也就是每一行对应一个新的实例,对应类是需要实现序列化(implements Serializable  - import java.io.Serializable),这些对应类称为持久化对象,是数据层DAO,Domain,向下直接对应数据库,向上接服务层,它们的属性是对应数据库的列,方法是对数据库的操作,比如,先设定一个公共基类,可以完成,一般表的createby,createddate,modifiedby,modifieddate这4个常用字段的添加,最好将分页属性也放进去,再将这些对应类建立,这些对应类应该是继承基类,并且,对应数据表的(可以是单表结构,单表查询结果,多表查询结果,查询结果添加自定义字段的,查询结果进行转换过的等等 - 引申为po,dto),对这些类的方法中实现具体操作(可以建立接口( interface IBasicService<T> ->CURD同find、getAll,getCount。。。  )同DAOImpl这样的实现类 (

引申扩展服务层(serice类,封装业务流程)一般流程:

1.Interface:

public interface ICustomerService {

定义各种方法,只是定义,实现可以交代其他人来写了。。。

PageInfo<CustomerContactVo> queryCustomerContactList(CustomerContactVo contactVo) throws Exception;

}

2.service:

实现接口,实现接口中定义的方法,对数据层进行调用:

public class CustomerServiceImpl implements ICustomerService{

private static final Logger logger = LoggerFactory.getLogger(CustomerServiceImpl.class);

...

//对DAO进行调用,其中interface  ICustomerDao ->  CustomerDaoImpl implements  ICustomerDao {}

@Resource
private ICustomerDao customerDao; //下面方法没有用到,只是举个DAO层例子,这个DAO接口实现的方法将对数据库进行操作,对业务需求进行实现,引申为服务层用DAO接口方式同数据层解耦(业务层不依赖持久层),这个接口可以选择任何数据库来实现,高层不依赖低层(依赖倒转原则),依赖抽象,面对接口编程。

...

@Override
public PageInfo<CustomerContactVo> queryCustomerContactList(CustomerContactVo contactVo) throws Exception {
PageHelper.startPage(contactVo.getPage(), contactVo.getRows());
PageInfo<CustomerContactVo> customerContact = null;

try {
if (!StringUtils.isBlank(contactVo.getApplicationQuery())) {
UserInfo userInfo = (UserInfo) Core.cache().get(contactVo.getToken());
if (null != userInfo) {
contactVo.setCreatedBy(userInfo.getId());
}
}
customerContact = new PageInfo<CustomerContactVo>(customerDao.queryCustomerContactById(contactVo));
} catch (Exception e) {
// DAO exception 处理
}

return customerContact;
}

}

3.api (servlet/controller/action):

@Controller
@RequestMapping(value = "/customer")
@Api(value = "/customer")
public class CustomerApi extends BasicApi<Object> {

@Reference(timeout = 100000)

private ICustomerService customerService; //同上面服务实现DAO接口实现一样,这里是表示层对服务接口的调用,让表示层不依赖于业务层

@RequestMapping(value = "/queryCustomerContactList", method = RequestMethod.POST)
public @ResponseBody Object queryCustomerContactList(CustomerContactVo contactVo, HttpServletRequest request)
throws JsonProcessingException {
if (ObjectUtils.isEmpty(contactVo)) {
throw new Exception("E04", "", null);
}
Object object = sendDataTablePageAjaxData(customerService.queryCustomerContactList(contactVo));
return object;
}

}

4.Html

Html,css,javascript,Jquery,bootstrap,vue,ios,android...

->XML JSON

->HTTP AJAX

->HTTP

)来做,也可以不用,如果考虑多个数据库切换最好做,比如:mssqlImpl implements IBasicService()):

public class BasicDomain implements Serializable {

private static final long serialVersionUID = 6686489176603998566L;

/**
* 前台传入参数:当前页
*/
private int page = 1;
/**
* 前台传入参数:每页页数
*/
private int rows = 10;
/**
* 前台传入参数:排序字段
*/
private String sidx;
/**
* 前台传入参数:排序类型
*/
private String sord;
/**
* 数据库分页参数:当前页
*/
private int start;

/**
* 数据库分页参数:每页页数
*/
private int limit = 10;

/**
* 创建时间
*/
private Date createdDate;
/**
* 创建人
*/
private String createdBy;
/**
* 修改时间
*/
private Date modifiedDate;
/**
* 修改人
*/
private String modifiedBy;

。。。

getter/setter

。。。

}

//PO

public class Customer extends BasicDomain {
/**
*
*/
private static final long serialVersionUID = 1L;
private String customerID;
private Long accountID;// 客户ID
private String name;// 名称
private String number;// 编号

。。。

//非实体关联关系属性,仅供方便传参
private CustomerExt customerExt;
private CustomerBankInfo customerBankInfo;

//可以List VO ,VO是业务层的数据传递,也是前端显示数据,比如,DTO(DTO类封装业务实体对象)是0同1,那么VO是男同女,view同model要避免强耦合,

private List<CustomerAddressVO> customerAddressList;

public CustomerBankInfo getCustomerBankInfo() {
return customerBankInfo;
}

public List<CustomerAddressVO> getCustomerAddressList() {
return customerAddressList;
}

public void setCustomerBankInfo(CustomerBankInfo customerBankInfo) {
this.customerBankInfo = customerBankInfo;
}

public void setCustomerAddressList(List<CustomerAddressVO> customerAddressList) {
this.customerAddressList = customerAddressList;
}

。。。

}

一般带上下面3个:

@Override
public int hashCode() {

@Override
public boolean equals(Object obj) {

@Override
public String toString() {

Mybatis的学习1的更多相关文章

  1. Mybatis架构学习

    Mybatis架构学习 MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架.MyBatis 封装了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.可以对配置和原生Map使用 ...

  2. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  3. MyBatis入门学习(二)

    在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...

  4. Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】

    一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...

  5. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(三)——MyBatis全局配置文件解析

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6874672.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(二)——My ...

  7. Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6878529.html 前面有讲到Spring+SpringMVC+MyBatis深入学习及搭建(三)——My ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(五)——动态sql

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6908763.html 前面有讲到Spring+SpringMVC+MyBatis深入学习及搭建(四)——My ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(六)——MyBatis关联查询

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6923464.html 前面有将到:Spring+SpringMVC+MyBatis深入学习及搭建(五)--动 ...

  10. Spring+SpringMVC+MyBatis深入学习及搭建(七)——MyBatis延迟加载

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6953005.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(六)——My ...

随机推荐

  1. cocos CCLayer glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);ios11闪退 spine动画

    搜索一下方法,找到后替换不同内容: void PolygonBatch::flush () { if (!_verticesCount) return; GL::bindTexture2D(_text ...

  2. go语言学习--内核态和用户态(协程)

    go中的一个特点就是引入了相比于线程更加轻量级的协程(用户态的线程),那么什么是用户态和内核态呢? 一.什么是用户态和内核态 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核 ...

  3. maven私库nexus2.3.0-04迁移升级到nexus-3.16.1-02(异机迁移备份)

    环境信息: nexus2.3.0-04安装在32位Windows server 2003系统上 安装位置信息如下: 仓库迁移 Nexus的构件仓库都保存在sonatype-work目录中,nexus2 ...

  4. Glide 加载部分圆角图片

    在App开放中经常遇到设置ImageView为部分圆角的情况,但是Glide又没有提供这个方法,该怎么办呢?直接上代码! /**  * @author csc  * @date 2019-01-18 ...

  5. Tesseract训练

    最近在用Tesseract做一个图片识别的小应用,目标图像只有数字和英文字母,在实际使用过程中发现个别数识别错误,因此不得不研究学习Tesseract的训练. http://www.cnblogs.c ...

  6. c语言函数参数类似继承的传递

    函数的参数如果是一个父结构的指针, 这个结构包含在另一个子结构中, typedef struct test_node_one test_node_one_t; typedef struct test_ ...

  7. url编码乱码问题解决

    //url encodeURI加密 window.location.href = "upload.html?sendName="+encodeURI(sendName); //接收 ...

  8. linux下导入、导出mysql数据库命令的实现方法

    首先建空数据库 mysql>create database abc; 导入数据库 mysql>use abc; 设置数据库编码 mysql>set names utf8; 导入数据( ...

  9. Exp6 信息搜集与漏洞扫描 20164313 杜桂鑫

    1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 1.使用搜索引擎 在百度搜索栏内输入 site:com filetype:doc 北京电子科技学院 ...

  10. sql 查询语句的练习

    --1.使用基本查询语句. --(1)查询DEPT表显示所有部门名称. select * from dept; --(2)查询EMP表显示所有雇员名及其全年收入(月收入=工资+补助),处理NULL行, ...