使用DAO可以继承BaseMapper通用DAO接口来完成一些基本操作,仍然以单表CRUD为例。
//DAO的一些接口需要识别ID属性,因此有必要在DTO对象上通过@Column注解标记出它们@Table(mapUnderscoreToCamelCase=true)publicclassTestUser{@Column(primary=true)privateIntegerid;privateStringname;privateIntegerage;privateDatecreateTime;//gettersandsettersomitted}//创建数据源DataSourcedataSource=DsUtils.dsMySql();//创建通用DAODalSessionsession=newDalSession(dataSource);BaseMapper<TestUser>baseMapper=session.createBaseMapper(TestUser.class);//初始化一些数据baseMapper.template().loadSQL("CreateDB.sql");//查询数据List<TestUser>dtoList=baseMapper.query().queryForList();PrintUtils.printObjectList(dtoList);//插入新数据TestUsernewUser=newTestUser();newUser.setName("newUser");newUser.setAge(33);newUser.setCreateTime(newDate());intresult=baseMapper.insert(newUser);//更新,将name从mali更新为malaTestUsersample=baseMapper.queryById(1);sample.setName("mala");intresult=baseMapper.updateById(sample);//删除,ID为2的数据intresult=baseMapper.deleteById(2);作为DAO可以定义自己的方法,并通过注解配置具体执行的SQL语句。
//BaseMapper是可选的,继承它相当于多了一组单表CURD的扩展功能。@SimpleMapperpublicinterfaceTestUserDAOextendsBaseMapper<TestUser>{@Insert("insertinto`test_user`(name,age,create_time)values(#{name},#{age},now())")publicintinsertUser(@Param("name")Stringname,@Param("age")intage);@Update("update`test_user`setage=#{age}whereid=#{id}")publicintupdateAge(@Param("id")intuserId,@Param("age")intnewAge);@Delete("deletefrom`test_user`whereage>#{age}")publicintdeleteByAge(@Param("age")intage);@Query(value="select*from`test_user`where#{beginAge}<ageandage<#{endAge}",resultType=TestUser.class)publicList<TestUser>queryByAge(@Param("beginAge")intbeginAge,@Param("endAge")intendAge);}//创建DalRegistry并注册TestUserDAODalRegistrydalRegistry=newDalRegistry();dalRegistry.loadMapper(TestUserDAO.class);//使用DalRegistry创建SessionDalSessionsession=newDalSession(dataSource,dalRegistry);//创建DAO接口TestUserDAOuserDAO=session.createMapper(TestUserDAO.class);使用Mapper统一管理SQL的最佳场所仍然是Mapper文件,而且dbVisitor 的Mapper文件高度兼容MyBatis学习成本极低。
//利用@RefMapper注解将Mapper文件和接口类联系起来(继承BaseMapper是可选的)@RefMapper("/mapper/quick_dao3/TestUserMapper.xml")publicinterfaceTestUserDAOextendsBaseMapper<TestUser>{publicintinsertUser(@Param("name")Stringname,@Param("age")intage);publicintupdateAge(@Param("id")intuserId,@Param("age")intnewAge);publicintdeleteByAge(@Param("age")intage);publicList<TestUser>queryByAge(@Param("beginAge")intbeginAge,@Param("endAge")intendAge);}为了更好了解和使用dbVisitor 的Mapper文件建议增加DTD加以验证。另外HasorDB兼容MyBatis3的DTD对于绝大部分MyBatis工程都可以正常兼容。
DOCTYPEmapperPUBLIC"-//dbvisitor.net//DTDMapper1.0//EN""https://www.dbvisitor.net/schema/dbvisitor-mapper.dtd"><mappernamespace="net.hasor.db.example.quick.dao3.TestUserDAO"><resultMapid="testuser_resultMap"type="net.hasor.db.example.quick.dao3.TestUser"><idcolumn="id"property="id"/><resultcolumn="name"property="name"/><resultcolumn="age"property="age"/><resultcolumn="create_time"property="createTime"/>resultMap><sqlid="testuser_columns">name,age,create_timesql><insertid="insertUser">insertinto`test_user`(<includerefid="testuser_columns"/>)values(#{name},#{age},now())insert><updateid="updateAge">update`test_user`setage=#{age}whereid=#{id}update><deleteid="deleteByAge">deletefrom`test_user`whereage>#{age}]]>delete><selectid="queryByAge"resultMap="testuser_resultMap">selectid,<includerefid="testuser_columns"/>from`test_user`where#{beginAge}<ageandage<#{endAge}select>mapper>快速条件拼接快速条件拼接包含快速'与'条件和快速'或'条件它们是两个规则用于取代简单的if标签和简单的foreach标签。如下语句,当参数不为空时候才拼接sql<selectid="queryUser">select*from`test_user`where1=1<iftest="age!=null">andage=#{age}if>select>可以简化为快速规则写法,其中:age为属性名。<selectid="queryUser">select*from`test_user`@{and,age=:age}select>例如如下foreach操作:<selectid="queryUser">select*from`test_user`whereidin<foreachitem="item"index="index"collection="list"open="("separator=","close=")">#{item}foreach>select>可以简化为快速规则写法,其中:list为集合属性名。<selectid="queryUser">select*from`test_user`@{and,idin(:list)}select>如果多个简单条件,快速写法将会极大的减少Mapper的工作量。<select
评论