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

网站开发公司vue框架网站建设征集意见

网站开发公司vue框架,网站建设征集意见,手机论坛网站模板,wordpress 主题 修改本篇主要对Mybatis基础使用进行总结#xff0c;包括Mybatis的基础操作#xff0c;使用注解进行增删改查的练习#xff1b;详细介绍xml映射文件配置过程并且使用xml映射文件进行动态sql语句进行条件查询#xff1b;为了简化java开发提高效率#xff0c;介绍一下依赖#x…    本篇主要对Mybatis基础使用进行总结包括Mybatis的基础操作使用注解进行增删改查的练习详细介绍xml映射文件配置过程并且使用xml映射文件进行动态sql语句进行条件查询为了简化java开发提高效率介绍一下依赖例如lombok依赖等。后续会对Mybatisplus进行总结。 目录 一、什么是Mybatis 二、小细节  三、Mybatis基础操作 使用注解实现增删改查操作 删除操作 插入操作 更新操作 查询操作 四、xml映射文件的使用 如何配置xml映射文件 第一条规范 第二条规范 五、动态sql语句 动态查询操作  动态更新操作 批量删除操作 一、什么是Mybatis Mybatis是持久层框架也就是前面篇章讲的DAO层框架用于简化JDBC的开发前面介绍过jdbc使用起来比较复杂需要导入依赖然后创建连接编写sql语句创建载具传输sql然后对结果进行解析等操作引入Mybatis极大简化了对数据的操作。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息将接口和 Java 的 实体类 映射成数据库中的记录。 二、小细节  数据库连接池更换 springboot中自带的数据库连接池是HikariDataSource如果想更换的话例如Druid只需要将这个依赖的坐标配置到pom.xml文件中即可 lombok依赖 当我们获取数据库数据的时候需要用一个实体类与数据库的数据去对应然后将数据封装在实体类对象中但是自己去实现这个类的时候发现代码量也比较多get、set方法以及无参数的构造器和有参数的构造器等等需要自己去生成整体上比较臃肿所以可以音符一个依赖然后使用相应注解去简化这个操作     lombok是一个实用的java类库能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法并且可以自动化生成日志变量简化开发提高效率。注解如下 在pom.xml文件中引入如下依赖 dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional /dependency 更改后下面各种方法就不用自己手动实现了。 package com.springboot_mybatis.pojo;import lombok.*;//pojo这个包专门用来放实体类 Data NoArgsConstructor AllArgsConstructor public class User {private Integer id;private String name;private Short age;private Short gender;private String phone; // public User() { // } // // public User(Integer id, String name, Short age, Short gender, String phone) { // this.id id; // this.name name; // this.age age; // this.gender gender; // this.phone phone; // }// public Integer getId() { // return id; // } // // public String getName() { // return name; // } // // public Short getAge() { // return age; // } // // public Short getGender() { // return gender; // } // // public String getPhone() { // return phone; // } // // Override // public String toString() { // return User{ // id id // , name name \ // , age age // , gender gender // , phone phone \ // }; // } // // public void setId(Integer id) { // this.id id; // } // // public void setName(String name) { // this.name name; // } // // public void setAge(Short age) { // this.age age; // } // // public void setGender(Short gender) { // this.gender gender; // } // // public void setPhone(String phone) { // this.phone phone; // } }三、Mybatis基础操作 使用注解实现增删改查操作 准备工作 准备数据库表emp。创建一个新的springboot工程然后引入起步依赖mybatis、mysql驱动、lombok依赖等。application.properties中配置数据库连接信息包括userpassword数据库名称等。创建实体类Emp用来封装数据库数据。准备Mapper接口EmpMapper对数据库进行操作要知道Mapper中是写sql语句的需要给里面传递参数来进行数据库操作创建好数据库表后连接数据库点击右侧Database然后点击号选择Mysql填上对应的信息user、password、数据库表名称等即可完成。 工程整体结构如下 删除操作 EmpMapper代码方法前要添加Delete注解表示删除操作然后里面写具体的sql代码。 Mapper public interface EmpMapper {//TODO 根据ID删除数据操作此处删除的话需要指定id所以此处需要传入一个idDelete(delete from emp where id#{id}) // public void delete(Integer id);public int delete(Integer id); 在test文件中进行测试 此处进行依赖注入EmpMapper类的对象然后调用delete方法并传入参数即可对该数据库进行操作。 //在定义好了接口以及数据库的数据以及对应的User类后需要进行测试测试需要在test文件中进行 SpringBootTest//这个就是springboot整合单元测试的注解 class SpringbootMybatisCrudApplicationTests {//注意在UserMapper接口中注解了Mapper所以在容器中已经有了实现这个接口的对象所以只需要依赖注入即可使用Autowiredprivate EmpMapper empMapper;Testpublic void testDelete(){int delete empMapper.delete(17);//此处别忘了传递参数System.out.println(删除的行数delete);} 在进行例如删除操作后并不知道执行的过程可以在配置文件中进行配置在application.properties文件中配置日志输出配置好后可以在控制台中输出日志信息 #配置mybatis的日志指定输出到控制台 mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl 配置好后完成删除操作后会控制台会显示如下信息 插入操作 主键回显 为什么要获取主键在一个表中添加数据之后一般还需要维护其关系表数据所以要获取到主键然后再对其关系表数据进行操作。 在数据插入成功后需要获取插入数据库数据的主键例如id为主键刚插入的id为12想获取12这个值一般主键是自增的所以不用手动写下方代码也没有传入id这个值所以想获取主键可以用这个注解的方法来实现 获取方法 在insert注解前面再添加一个注解Options(keyProperty”id”,userGeneratedKeystrue),这样就会自动将生成的主键值赋值给emp对象的id属性否则不会给id属性赋值 EmpMapper中代码会直接从对象中的属性取值 //TODO 新增员工注意如果在values里面添加值的话这样就写死了复用性差所以想直接传递一个对象注意这里的#{}里面的参数是属性要和属性名一样Options(useGeneratedKeys true,keyProperty id)//主键回显自动将主键值赋值给该对象的id属性这样就可以拿到主键值了Insert(insert into emp(username,name,gender,image,job,entrydate,dept_id,create_time,update_time) values(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime}))public void insert(Emp emp); test文件中测试将对象属性赋值然后调用insert方法 Testpublic void testInsert(){Emp empnew Emp();emp.setUsername(Tom1);emp.setName(汤姆1);emp.setImage(1.jpg);emp.setGender((short)1);emp.setJob((short)1);emp.setEntrydate(LocalDate.of(2000,1,1));emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());emp.setDeptId(1);empMapper.insert(emp);//测试是否能拿到主键值System.out.println(emp.getId());} 更新操作 EmpMapper中代码 Update(update emp set username#{username},name#{name},gender#{gender},image#{image},job#{job},entrydate#{entrydate},dept_id#{deptId},update_time#{updateTime} where id#{id})public void update(Emp emp); test测试注意此处有点缺陷是新创建了一个Emp对象并且调用update方法并传入这个对象作为参数所以更新的话需要全部属性都要更新如果少对emp对象属性赋值的话那么数据库中的相应属性也会为null。后续会采用动态sql。 Test//测试更新方法public void testUpdate(){Emp empnew Emp();emp.setId(22);emp.setUsername(Jerry);emp.setName(杰瑞);emp.setImage(1.jpg);emp.setGender((short)1);emp.setJob((short)1);emp.setEntrydate(LocalDate.of(2000,1,1));emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());emp.setDeptId(1);empMapper.update(emp);} 查询操作 查询操作有一点坑 如果采用第一种方法在数据库中属性名为dept_id,而实体类对象中的属性名为deptId二者名称不同会导致mybatis从数据库查询到的数据不会自动封装到对应属性当中采用第三种方法在properties文件中进行配置如下代码即可自动将dept_id封装到驼峰命名deptId #开启mybatis的驼峰命名自动映射开关---可以将数据库中属性a_dan自动封装到实体类的属性aDan mybatis.configuration.map-underscore-to-camel-casetrue EmpMapper中代码 //TODO 查询指定数据查询所有数据在前面项目中已经展示返回类型为对象集合//下面这个方法是不合理的因为如果数据库中的属性名和实体类的属性名不相同的话mybatis不会自动封装也就是这几个值不会自动给类的属性赋值所以这几个属性的值为null // Select(select *from emp where id#{id}) // public Emp select(Integer id);//通过Result注解手动进行映射封装不推荐这种方法比较复杂 // Results({ // //一个Result代表将一列映射到一个属性有三个属性和数据库列不一致所以要写三个 // Result(column dept_id,property deptId), // Result(column create_time,property createTime), // Result(column update_time,property updateTime) // }) // Select(select*from emp where id#{id}) // public Emp select(Integer id); //推荐的方法开启mybatis的驼峰命名自动映射开关---可以将数据库中属性a_dan自动封装到实体类的属性aDan // 需要在resources资源文件中的配置文件中进行配置配置好后原来的代码怎么写现在就怎么写Select(select *from emp where id#{id})public Emp select(Integer id); test测试 public void testSelect(){Emp emp empMapper.select(1);System.out.println(emp);} 四、xml映射文件的使用 通过完成上述增删改查操作后发现有一个很大的缺陷就是更新的时候必须全部属性更新无法对个别属性进行更新查询操作也同样如此无法随意指定属性作为条件进行查询因为EmpMapper中查询的条件写死了必须按照那几个属性进行查询少传或者多传参数会报错因此为了解决这个缺陷采用xml映射文件 如何配置xml映射文件 有三条规范 第一条规范 首先根据mapper包创建配置文件必须要用/来分隔这样就可以创建多级目录注意名称需要和项目包名com.springboot_test1以及mapper包名mapper一致. 如下图此处创建file名为com/springboot_test1/mapper然后再创建一个名为EmpMapper.xml的文件即可。 然后复制如下代码到刚创建的xml文件中 ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd 第二条规范 xml映射文件中的namespace属性与Mapper接口的全限定名一致获取接口的全限定名copy reference 第三条规范 sql语句中的id与Mapper接口中的方法名一致并且ResultType为单条记录所封装的类型select中的id就是接口中的方法名对于resultType将这个实体类copy reference即可    整体上就是当调用EmpMapper接口中的方法的时候先去查找xml映射文件中namespace属性与这个接口全限定名相同的然后找到id属性与方法名相同的sql语句然后执行这条sql语句返回结果 这样就配置完成xml映射文件。 五、动态sql语句 像如下这种的sql语句直接就写死了必须要传进去这些参数。但是如果想传递部分参数然后进行条件查询的话此时就是动态sql语句(在xml映射文件中编写sql语句) 可以用以下方式来实现if  where查询   set更新标签的使用where是用于去除冗余的逗号等可以进行自动判断 if标签用于判断条件是否成立使用test属性进行条件判断如果条件为true那么则拼接sql。 动态查询操作  EmpMapper中代码注意有了xml映射文件EmpMapper中方法前面就无需加响应注解了只需要在xml映射文件中对应上方法名称以及resultType即可。想根据哪些属性查询就传入哪些属性。 //TODO 通过xml映射文件配置条件查询就不用带注解了!!!public ListEmp list1(String name, Short gender, LocalDate begin,LocalDate end); xml映射文件中代码  select idlist1 resultTypecom.springboot_test1.pojo.Empselect id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_timefrom empwhereif testname!nullname like concat(%,#{name},%)/ifif testgender!nulland gender#{gender}/ifif testbegin!null and end!nulland entrydate between #{begin} and #{end}/if/whereorder by update_time desc/select test测试用where标签的原因如下 Testpublic void testSelect_tiaojian1() { // ListEmp listempMapper.list1(张,null,null,null);//但是如果将name设置为null之后就会报错因为用if语句有了就拼接没有就舍弃// 这样name舍弃之后where后面多了一个andselect *from emp where and gender? order by update_time desc//为了解决这个问题引入mybatis中的标签where;将xml映射文件中的select语句里面的where替换为where,会自动删除and // ListEmp listempMapper.list1(null,(short)1,null,null); //此时相当于查询全部数据ListEmp listempMapper.list1(null,null,null,null);System.out.println(list);} 动态更新操作 EmpMapper中 //TODO 动态更新员工信息在xml映射文件中配置public void update2(Emp emp);//可以Alt加回车然后点击generate自动在xml文件中配置 xml映射文件中 update idupdate2 # update emp where id1,nametom......update empsetif testusername!nullusername#{username},/ifif testname!nullname#{name},/ifif testgender!nullgender#{gender},/ifif testimage!nullimage#{image},/ifif testjob!nulljob#{job},/ifif testentrydate!nullentrydate#{entrydate},/ifif testdeptId!nulldept_id#{deptId},/ifif testupdateTime!nullupdate_time#{updateTime}/if/setwhere id #{id}/update test测试 Test//测试更新方法要求是id为22号数据username更新为Jerrygoodname更新为杰瑞棒gender更新为2// 采用xml映射文件以及动态更新sql语句可以发现后面不需要更改的属性没有变成nullpublic void testUpdate2(){Emp empnew Emp();emp.setId(22);emp.setUsername(Jerrygood);emp.setName(杰瑞棒);emp.setGender((short)2);emp.setUpdateTime(LocalDateTime.now());//这个是要更新的每次改动数据要改成现在的时间empMapper.update2(emp);} 批量删除操作 此处使用foreach标签 EmpMapper中 //TODO 批量删除操作是根据id号来删除因为是多个id所以一般用数组或者集合来接收public void deleteByIds(ListInteger ids); xml映射文件中 !--批量删除员工操作(18,19,20) collection:所要遍历的集合:ids要和接口中定义的方法的参数相同 item遍历出来的元素 separator分隔符用分隔 open遍历开始前拼接的sql片段:( close遍历开始后拼接的sql片段:) --delete iddeleteByIds delete from emp where id in foreach collectionids itemid separator, open( close) #{id} /foreach/delete /mapper test测试 Test //测试批量删除方法public void testDeleteByIds(){ListIntegeridsArrays.asList(13,14,15);empMapper.deleteByIds(ids);} 以上就是mybatis基础用法以及细节。
http://www.hkea.cn/news/14337132/

相关文章:

  • 大连地区建设网站大地seo
  • 网站建设合同简单嘉兴网站快照优化公司
  • 山东建设厅网站石家庄企业网站建设价格
  • 网站建设英文字体格式郑州短视频拍摄制作
  • 网站如何做谷歌优化网站一般用什么数据库
  • 网站建设设计主要系统wordpress 黄蓝 现代企业
  • 安阳做网站电话呼和浩特网站建设公司
  • 免建网站led网站建设方案模板
  • 帝国cms做英文网站上海网站设计案例
  • 企业百度网站怎么做数据服务器
  • 重庆奉节网站建设佛冈网站建设
  • flashfxp上传网站模板微信信公众号平台
  • 触屏版网站设计上海市中小企业服务云
  • 企业网站html百度云网站播放mp3代码
  • 有没有做语文题的网站应用商店app下载安装最新版
  • 做网站文案ui交互动效 wordpress
  • 哪个网站做相册好深圳市宝安区网站建设
  • 徐州市制作网站的公司互联网营销有哪些
  • 专业做互联网招聘的网站有哪些内容宽屏大气网站模板
  • 网站设计常用软件wordpress 企业主题下载
  • 盐城网站开发代理谷歌企业邮箱注册
  • o2o网站开发腾讯云服务器使用教程
  • 黄冈建设网站新装本地wordpress超慢
  • 网站设计与网页配色实例精讲网络会议网站
  • 办个网站需要投资多少网站建设的运作原理
  • 网站建设 补充协议中国建设培训网站查询系统
  • 营销型网站建设效果一个app开发大概要多少钱
  • 河南郑州最近的热搜事件广州网站建设seo
  • 如何自己做门户网站让别人做的网站不给源代码
  • 安利的网站谁做的软件外包公司账务处理