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

如何做网站引流天津商城网站制作

如何做网站引流,天津商城网站制作,公司备案网站被注销吗,老油条视频h5什么是mybatis#xff1f; mybatis是一款用于持久层的、轻量级的半自动化ORM框架#xff0c;封装了所有jdbc操作以及设置查询参数和获取结果集的操作#xff0c;支持自定义sql、存储过程和高级映射 mybatis用来干什么#xff1f; 用于处理java和数据库的交互 使用mybat…什么是mybatis mybatis是一款用于持久层的、轻量级的半自动化ORM框架封装了所有jdbc操作以及设置查询参数和获取结果集的操作支持自定义sql、存储过程和高级映射 mybatis用来干什么 用于处理java和数据库的交互 使用mybatis的好处 与JDBC相比减少了50%以上的代码量。MyBatis灵活不会对应用程序或者数据库的现有设计强加任何影响SQL可以写在XML里还可以以注解方式写到Java代码中从程序代码中彻底分离降低耦合度便于统一管理和优化可重用。提供XML标签支持编写动态SQL语句XML中使用 if, else 等 使用mybatis 下载Mybatis的jar包Releases · mybatis/mybatis-3 (github.com) 创建xml文件mybatis-config.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttps://mybatis.org/dtd/mybatis-3-config.dtd configurationenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver value${driver}/property nameurl value${url}/property nameusername value${username}/property namepassword value${password}//dataSource/environment/environmentsmappersmapper resourceorg/mybatis/example/BlogMapper.xml//mappers /configuration修改内容 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder可创建多个SqlSessionFactory实例 SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(new FileInputStream(mybatis-config.xml)); SqlSessionFactory 通过SqlSessionFactory创建多个会话SqlSession对象每个会话就相当于我不同的地方登陆一个账号去访问数据库。 一般SqlSessionFactory只需要创建一次 SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(new FileInputStream(mybatis-config.xml));SqlSession 使用 MyBatis 的主要 Java 接口就是 SqlSession。你可以通过这个接口来执行命令获取映射器实例和管理事务。SqlSession实例可直接执行已映射的sql语句。 确保SqlSession关闭的标准模式 //try-with-resource try(SqlSession session sqlSessionFactory.openSession()) {}XML映射语句 基于XML映射语句便可满足sqlsession的调用 例如简单的select语句 ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespaceTestMapperselect idselectEmployee resultTypecom.test.entity.Employeeselect * from employee where id #{id}/select /mapper参数符号#{id}这就告诉 MyBatis 创建一个预处理语句PreparedStatement参数在 JDBC 中这样的一个参数在 SQL 中会由一个?来标识并被传递到一个新的预处理语句中. MybatisUtil工具类 创建MybatisUtil工具类以便集中创建SqlSession public class MybatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {sqlSessionFactory new SqlSessionFactoryBuilder().build(new FileInputStream(mybatis-config.xml));} catch (FileNotFoundException e) {e.printStackTrace();}}/*** 获取一个新的会话* param autoCommit 是否开启自动提交跟JDBC是一样的如果不自动提交则会变成事务操作* return SqlSession对象*/public static SqlSession getSession(boolean autoCommit){return sqlSessionFactory.openSession(autoCommit);} }方便使用 public class Main {public static void main(String[] args) throws FileNotFoundException {try(SqlSession session MybatisUtil.getSession(true)) {TestMapper mapper session.getMapper(TestMapper.class);}} }映射器接口 映射器是一些用来绑定映射语句的接口。创建com.test.mapper包创建接口TestMapper。 这样做好处是将映射器的结果快速转换为需要的实体类通过XML中的namespace绑定接口 全限定名比如 “com.test.mapper.TestMapper将被直接用于查找及使用。 mapper namespacecom.test.mapper.TestMapperselect idselectEmployee resultTypecom.test.entity.Employeeselect * from employee/select /mapper将接口与XML放在同包资源中修改mybatis-config.xml文件 mappersmapper resourcecom/test/mapper/TestMapper.xml//mappersXML配置属性typeAliases typeAliases类型别名简化Mapper的缩写 configurationtypeAliasestypeAlias typecom.test.entity.Employee aliasEmployee//typeAliasesenvironments defaultdevelopment........或直接扫描包默认别名为小写的开头 typeAliasespackage namecom.test.entity//typeAliases也可写注解来指定别名 Alias(employee) public class Employee {... }ResultMap 当类中定义的字段与数据库的字段不统一时用ResultMap来映射到对应的实体 column数据库中的字段propertyjava中编写的字段名称 mapper namespacecom.test.mapper.TestMapperresultMap idTest typeEmployeeresult columnid propertyxxx//resultMapselect idselectEmployee resultMapTest....多个构造器如何选择 当有多个构造器优先选择满足全部字段的构造器如果没有则报错 如果只有一个构造器不管满足几个字段都会调用 那如果就是没有满足的呢那就要用constructor mapper namespacecom.test.mapper.TestMapperresultMap idTest typeEmployeeconstructorarg columnid javaTypeInteger/arg columnname javaTypeString//constructorresult columnid propertyxxx//resultMap.......注意这样写的话构造器中形参需要对象类型比如如果用int不用Interger会报错 另外这样写的话构造器中的字段并不会映射到因为映射器已经交给构造器来处理了。 bug绑定错误 Exception in thread “main” org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解决select中id与接口绑定错误记得要一致 增删改查 创建接口实例 TestMapper mapper session.getMapper(TestMapper.class);TestMapper.xml中编写sql语句 mapper namespacecom.test.mapper.TestMapperselect idgetEmployeeId resultTypeEmployeeselect * from employee where id #{id}/selectinsert idaddEmployee parameterTypeEmployeeinsert into employee (id, name, sex, age, salary) values (#{id}, #{name}, #{sex}, #{age}, #{salary})/insertdelete iddeleteEmployeedelete from employee where id #{id}/delete /mapper通过接口实例直接调用接口中的方法 update操作 mapper: update idupdateStudent parameterTypestudentupdate student set sex #{sex} where sid #{sid} /updatemapper接口 int updateStudent(Student student);测试 Student student mapper.getStudentSid(1940618805); student.setSex(女); mapper.updateStudent(student);复杂查询 多表查询一对多例如查询一个老师教多少个学生 collection用于一对多关系即实体里面放集合 resultMap idasTeacher typeTeacherid columntid propertytid/result columntname propertyname/collection propertystudentList ofTypeStudentid propertysid columnsid/result columnname propertyname/result columnsex propertysex//collection /resultMap select idgetTeacherByTid resultMapasTeacherselect *, teacher.name as tname from student inner join teach on student.sid teach.sidinner join teacher on teacher.tid where teach.tid #{tid}/selectid columntid propertytid/ id用于唯一标识一个老师 多表查询多对一如果要求学生类增加一个老师属性即根据教师id来找教师的所有学生 association用于多对一关系 resultMap idtest2 typeStudentid columnsid propertysid/result columnname propertyname/result columnsex propertysex/association propertyteacher javaTypeTeacherid columntid propertytid/result columntname propertyname//association/resultMapselect idselectStudent resultMaptest2select *, teacher.name as tname from student left join teach on student.sid teach.sidleft join teacher on teach.tid teacher.tid where teach.tid #{tid}/select事务处理 自动提交关闭 SqlSession session MybatisUtil.getSession(false)手动提交 session.commit();动态SQL if test 为if的条件如果为真则拼接if标签里面的and语句如查询学号是偶数的男同学 select idgetStudentSid resultTypestudentselect * from student where sid #{sid}if testsid % 2 0and sex 男/if/selectchoosewhenotherwise 类似于switchcasedefault selectchoosewhen test and.../whenwhen test and.../whenotherwiseand.../otherwise/choose /select where where元素只会在有子元素有返回的情况下才会插入where并且如果子元素的开头是andor显然sql语句中 where and…是语法错误的吧where元素会将他们去除 select * from studentwhereif testsid ! null !-- and sid #{sid}--sid #{sid}/if/whereset update idupdateStudentupdate studentsetif testname ! nullname #{name}/if/setwhere sid #{sid}/update缓存机制 查询出的对象存入SqlSession的一级缓存如果后续有相同操作则之间从缓存中获取不需要重新构造一个对象提高效率 Student student mapper.getStudentSid(1940618805); Student student1 mapper.getStudentSid(1940618805); System.out.println(student1 student); // true但是如果在该两次相同的操作中对数据库内容进行了增删改操作则会清除缓存 并且每一个SqlSession会话的一级缓存是分开来的。即在不同的会话下上述操作得到的不是同一个对象 一级缓存也叫做本地缓存它只对一个会话的数据进行缓存。 要使用全局的缓存是需要开启二级缓存。只需要在mapper文件中加上 cache/cacheevictionFIFOflushInterval60000size512readOnlytrue/这个更高级的配置创建了一个 FIFO 缓存每隔 60 秒刷新最多可以存储结果对象或列表的 512 个引用而且返回的对象被认为是只读的因此对它们进行修改可能会在不同线程中的调用者产生冲突。 开启二级缓存后不同会话中连续的相同操作也会直接从缓存中获取对象。同样的如果在这两次操作之间对数据库内容进行了增删改操作则会清除缓存 但是多个会话时只有当一个会话结束了才会将数据从一级缓存写入二级缓存 public class Main {public static void main(String[] args) throws FileNotFoundException {try(SqlSession session1 MybatisUtil.getSession(true);SqlSession session2 MybatisUtil.getSession(true)) {TestMapper mapper1 session1.getMapper(TestMapper.class);TestMapper mapper2 session2.getMapper(TestMapper.class);Student student1 mapper1.getStudentSid(1940618806);Student student2 mapper2.getStudentSid(1940618806);System.out.println(student1 student2); // false 获取对象时会话未结束二级缓存没有内容}} }注解开发 去除mapper xml文件直接在mapper接口方法上写上注解 Insert(insert into student(sid, name, sex) values(#{sid}, #{name}, #{sex})) int addStudent(Student student);使用注解开发需要修改mybatis配置文件的mappers mappersmapper classcom.test.mapper.TestMapper/ !-- package namecom.test.mapper/--/mappers自定义映射规则 Results Results({Result(id true, column sid, property sid),Result(column name, property name),Result(column sex, property sex)})Select(select * from student where sid #{sid})Student getStudentSid(int sid);一对多查询如一个教师教的学生 Many(select) 这个就是一对多关系中联结查询的条件 Results(value {Result(column tid, property tid),Result(column name, property name),Result(column tid, property studentList, many Many(select getStudentByTid))})Select(select * from teacher where tid #{tid})Teacher getTeacherByTid(int tid);Select(select * from student inner join teach on student.sid teach.sid where tid #{tid})ListStudent getStudentByTid(int tid);Param() 当select语句有多个参数条件时使用Param() Select(select * from student where sid #{sid} and sex #{sex})Student getStudentBySidAndSex(Param(sid)int sid, Param(sex)String sex);否则报错 ### Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter sid not found. Available parameters are [arg1, arg0, param1, param2]这是因为多个参数时mybatis并不知道这些属性是哪里来的“Parameter xxx not found”
http://www.dnsts.com.cn/news/43039.html

相关文章:

  • app介绍网站模板免费下载网站报价内容
  • 南部县网站建设2万块建一个网站贵吗
  • dw怎么做班级网站备案网站名称大全
  • 青岛搭建公司宁波网站优化的关键
  • 广州制作公司网站的公司天元建设集团有限公司怎么样
  • 内部网站建设app岳阳建设银行网站
  • 网站设计总结政务服务网站建设运行情况
  • 凤翔做网站网站制作商家入驻
  • 童装网站建设目标苏州市姑苏区建设局网站
  • 建设公司网站需要注意什么php公司网站
  • 商务网站建设的基本流程wordpress中菜单
  • 禾天姿网站建设哈尔滨建设工程信息招标
  • 微信小程序开发大赛什么是网站排名优化
  • 免费服务器安全软件什么是seo营销
  • 商务网站建设流程步骤wordpress 支持svg
  • 企业网站设计的方案购物网站开发模板
  • 适合个人做的网站有哪些wordpress pdf
  • 如何给网站做住房和城乡建设部网站建造师
  • 区网站建设阿里云网站建设套餐
  • 智能网站建设加工微信小程序广告投放
  • 漳州市网站建设室内设计专用软件
  • 手机网站页面布局wordpress 数据库优化
  • 做前端常用的网站及软件下载全球采购网登录
  • 网站个人备案步骤网站侧边 跟随 样式
  • 商城类网站建设+数据库全方位营销型网站
  • 哪里有网站监控工具网站建设公司成都
  • 保定网站排名北京网站模板下载
  • 营销网站制作企业网站死链接
  • 免费1级做爰片免费网站wordpress去掉链接中的分类
  • 网站的域名和ip地址如何重新解析做外贸网站价位