• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ormybatis: ormybaits基于mybatis封装Dao层操作

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

ormybatis

开源软件地址:

https://gitee.com/javahui/ormybatis

开源软件介绍:

比较MyBatis Generator ...

  • 单表操作只要po类Dao类不需要xml文件.
  • 每个DAO对应的生成mapper xml几乎空白.
  • 没有使用接口mapper方式。而使用Dao class的方式,这样service层的dao操作代码可以移到Dao层.
  • insert时,自动设置当前日期为新增时间和修改时间 ,自动设置is_deleted为0.
  • 查询时,自动加上is_deleted = 0条件.
  • 所有操作至少一个查询条件,防止全表操作,select查询默认加上Limit 1000,防止查询大量记录.
  • 使用bean方式加入Select查询条件,自动识别分页属性,时间范围查询。
1. 加入jar
		<dependency>			<groupId>pers.richard</groupId>			<artifactId>ormybatis-spring-starter</artifactId>			<version>${project.version}</version>		</dependency>
2. spring配置:
XML配置文件方式<bean id="dataSource" ... /><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">	<property name="dataSource" ref="dataSource" />	<property name="mapperLocations">		<list>			<!-- dao类自定义sql xml文件 -->			<value>classpath:mapper/*.xml</value>			<!-- ormybatis的sql xml,单表CRUD模板文件,必须 -->			<value>classpath:ormybatis.xml</value>		</list>	</property>	<property name="configuration">    	<bean class="org.apache.ibatis.session.Configuration">    	     <property name="mapUnderscoreToCamelCase" value="true"/>        </bean>	</property>	<property name="plugins">		<array>			<bean class="com.github.pagehelper.PageInterceptor">				<property name="properties">					<value>						helperDialect=mysql					</value>				</property>			</bean>		</array>	</property></bean>Springboot配置文件方式spring:  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/d?useSSL=false&useUnicode=true&characterEncoding=utf-8    username: root    password: 123456##### 3. 加入插件,生成基本代码	<plugin>		<groupId>pers.richard</groupId>		<artifactId>ormybatis-maven-plugin</artifactId>		<version>1.0.0-SNAPSHOT</version>	</plugin>##### 4. 在项目的 src/main/resources目录下增加ormybatis.properties文件用以生成代码	jdbc.url=jdbc:mysql://localhost:3306/dbName?useSSL=true	jdbc.username=root	jdbc.password=123456		table.name=user	#生成src/main/resources路径下的文件夹名	sqlFile.path=mapper		# DAO类包路径	dao.package.path=pers.richard.example.dao	# po类包路径	domain.package.path=pers.richard.example.po		#Dao类名(可选)	dao.class.name=	#Domain bean类名(可选)	domain.class.name=##### 3. 运行mvn ormybatis:gen  生成dao类,po类,mapping xml文件###### 3.1. @DaoConfig注解    table(表名)###### 3.2. 查询demo```java@DaoConfig(table = "user")public class UserDao extends OrmybatisBaseDao<User>{		//主键id查询	public void selectId() {		//一个id查询		User u1 = super.selectOne(1);		User u2 = super.selectOne("1");				//Where id in (1,2)   --多id查询		List<User> userList = super.selectList("1,2");		List<User> userList2 = super.selectList(Arrays.asList(1,2));				//Where id in (1,2,10,20)   --多id查询		List<String> list = new ArrayList();		liset.add("1, 2");		liset.add("10, 20");		List<User> userList2 = super.selectList(list);	}		//一个条件查询	public void selectOneFieldWhere() {		//默认1:没有设置order by排序,则默认加上order By id desc		//默认2:默认加上Limit 1,防止查出多条查询		//WHERE age = 18 Limit 1 Order BY id desc		User u1 = super.selectOne(Field.AGE, "18")//返回一个对象		User u2 = super.selectOne(Field.AGE, "")//传入空,不执行查询,返回null				//传入空,不执行查询,selectList返回空集合,不是null		List<User> list = super.selectList(Field.NAME, "")		log.info(list.toString())//不会报NullPointException 返回[]	}		public void selectWhere(){		//默认1:如果没设置order by排序,则默认加上order By id desc		//默认2:如果没设置limit,则默认加上Limit 5000,防止查出数据太多,导致jvm异常		//select * from user ORDER BY id desc limit 5000		List<Account> super.selectList(Select.create());			//select * from user ORDER BY age DESC limit 10		List<Account> super.selectList(Select.create().orderDesc(Field.AGE).limit(10));			Select select1 = Select.create()			.eq(Field.NAME, "");//忽略空的查询条件			.eq(Field.STATUS, "0,1"); //自动为List<Integer>根据javaBean po中的类型				User u = super.selectOne(select1); //WHERE status in (0,1) ORDER BY id Limit 1		List<User> list = super.selectList(select1); //WHERE status in (0,1) ORDER BY id Limit 5000				//查询条件说明		Select s2 = Select.create()			.eq(Field.AGE, "1234")// account_no = '1234'			.like(Field.NAME, "wang")// account_no LIKE conat('wang', '%')			.likeContains(Field.NAME, "wang") // account_no LIKE conat('%', 'wang', '%')			.gt(Field.AGE, 101); // AGE > 101			.gte(Field.AGE, 100); // AGE >= 100			.lt(Field.AGE, 101); // AGE < 101			.lte(Field.AGE, 100); // AGE <= 100			.isNull(Field.AGE) // age is null			.isNullString(Field.NAME) //age=''					//时间范围的查询,如果Field字段是Date日期,同时使用 大于, 小于等范围查询,则自动转为(yyyy-MM-dd HH:mm:ss)格式		//传入值的格式支持各种形式		//WHERE create_time >= '2020-01-01 00:00:00' and create_time <= '2020-12-31 11:59:59'		Select.create(Select.create().gte(Field.CREATE_TIME, '2020-01-01').lte(Field.CREATE_TIME, '2020-12-31'))		Select.create(Select.create().betweenDate(Field.CREATE_TIME, '2020-01-01', '2020-12-31'))//效果一样				Map<String, Object> paramMap = new HashMap<>();		paramMap.put("age", 1234); // age='1234'(默认转为下划线命名法)		paramMap.put("status", "0, 1")); // acc_status in (0, 1) 自动变成in多个值查询		Select.create(paramMap);				//Where age=18 AND status= 0  ,忽略不存在字段名		Bean bean = new Bean().setAge("18").setStatus(0);		Select.create(bean);				//Where createTime>='2021-01-01 00:00:00' and create_time<='2021-10-01 00:00:00' limit 20 //自动识别时间的范围查询和分页查询		Bean bean = new Bean()			.setPageNo(1)			.setPageSize(20)			.setStartTime("2021/01/01")			.setEndTime("2021/10/01");		Select.create(bean);		//Where create_time>='2000-01-01 00:00:00' AND create_time<='2020-12-31 23:59:59' 		Map map = new HashMap()		map.put("startTime", "2000年");//bean有startTime属性则表示查询开始起始时间		map.put("endTime", "2020");//bean有endTime属性则表示查询开始结束时间		Select.create(map);				Select.create(Field.STATUS,0).orderDesc(Field.ID).limit(5);//status=0按Id倒序前5		Select.create(Field.STATUS,0).orderDesc(Field.ID).limitPage(2,20); //status=0按Id倒序取第2页20条				Select.create().eval("age = 18"); //注入sql查询语句, where age = 18		Select.create().eval("{} = {}", "id", 100); //占位符形式, where id = 100	}		//只查询指定的单条字段	public void selectField(){		//SELECT id FROM user WHERE stauts = 0 Order By id desc Limit 5000		List<Integer> ids = super.selectListByField(Field.ID, Select.create(Field.STATUS, 0));				//SELECT id FROM user WHERE stauts = 0 Order By id desc Limit 1		Integer id = super.selectOneByField(Field.ID, Select.create(Field.STATUS, 0));	}		//查询记录数量	public void count(){		//查询 acc_stauts = 0的一共有多少记录数		Select s = Select.create(Field.STATUS, 0);		Integer count = super.count(s);		//效果同上		Map<String, Object> paramMap = Collections.singletonMap("status", 0);		Integer count1 = super.count(paramMap);	}		//自定义SQL查询语句	public void getAgeByName(String name) {		//默认按当前dao的方法名去查找mapper select id		Map resultMap = super.selectOneMapperStatementByMethodName(name);		List<Map> result1 = super.selectListMapperStatementByMethodName(name);		//指定select id,不需要加namespace		Map map2 = super.selectOneStatement("getAgeByName", name)		List<Map> result2 = super.selectListStatement("getBalanceByAccountNo", accountNo)	}		public void insert() {		Date now = new Date();		//setUpdateTime,setCreateTime可不写,自动为当前时间		User u = new User()			.setName("1234")			.setStatus(0)			.setAge(18)			.setCreateUser(当前操作userId) //可省略,			.setUpdateTime(new Date()).setCreateTime(new Date());//可省略,自动会加createTime,updateTime		super.insert(account1);				//按id主键查询有则update,无则insert		super.insertOrUpdate(u);				//查询name='jack'的记录,有则忽略,无则insert操作		int insertResult = super.insertIfAbsent(u, Select.create(Field.NAME, "jack"));				//查找account_no = '1234' 的记录,有则用bean去update这条记录,无则insert操作		int insertResult1 = super.insertOrUpdate(u, Select.create(Field.NAME, "jack"));				//批量新增		List<User> list = ...;		super.insertBatch(list);		//批量新增 ,每100条做commit;		super.insertBatch(list, 100);				//手写sql,指定xml的insert id		suer.insert("insertId", parameterObject);	}		//修改操作	public void update() {		Date now = new Date();		User user = super.selectOne(1);		user.setStatus(0);		user.setUpdateTime(now);//可省略,自动设置当前时间		super.update(user);				Update u1 = Update.create()			.whereEq(Field.NAME, "1234") // where account_no = '1234'			.updateEq(Field.STATUS, 0) //acc_status=0			.updateIncr(Field.AGE, 10);//age = age + 10 自增10			.updateReduction(Field.AGE, 10);//age = age - 10 自减10		updateNum = super.update(u1);			//批量update,同批量insert类似		List<Account> list = ...;		super.updateBatch(list);				//update status = 0 Where id = 1;		Update u2 = Update.create().updateEq(Field.STATUS, 0).whereEq(Field.ID, 1)		int updateNum = super.update(u2);	}		public void delete(){		super.delete(Select.create(Field.ID, 1));//按查询条件删除,同update一样,必有一个查询条件,不支持全表删除		super.delete("1,2");//删除id in (1,2)			}}

account.xml 生成一个只有基本字段名的xml,用来写自定义sql,方便写sql复制字段名

<?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"><mapper namespace="user">	<sql id="columns">		t.ID  "id",		t.NAME  "name",		t.STATUS  "status",		t.AGE  "age",		t.CREATE_TIME  "createTime",		t.UPDATE_TIME  "updateTime"	</sql></mapper>

java po 实体bean

public class User extends AbstractDomain {	private Integer id;	//主键ID	private String name;	//名称	private Integer status;	//状态	private BigDecimal balance;	//年纪	private Date createTime;	//创建时间	private Integer createUser;	//创建时间	private Date updateTime;		public User(){}	public enum Field implements IField {//生成此处枚举,方便构造查询条件,代码联想功能		ID,		NAME,		STATUS,		AGE,		CREATE_TIME,		UPDATE_TIME;	}		public Integer getId() {return id;}	public Account setId(Integer id) {this.id = id;return this;}	......省略其它get set}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap