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

亚马逊网站做外贸浮雕模东莞网站建设

亚马逊网站做外贸,浮雕模东莞网站建设,网站被盗用,人力资源管理咨询公司MyBatis 1. MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code#xff0c;并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合#xff0c;是一个基于Ja…MyBatis 1. MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access ObjectsDAOs MyBatis虽然改变了名字但是实际的内核还是ibatis MyBatis以高轻量级闻名于全球提出以注入SQL的方式来管理持久化让整个项目在数据库操作这块与SQL语言完全解耦所以深受开发人员的喜爱 mybatis是一款高轻量级的基于ORM(对象关系映射)半自动化的持久层框架它更加关注原生sql的编写在实际开发过程中能够实现sql语句与业务代码的完全的解耦。它还支持强大的sql查询、存储过程、高级映射、缓存机制。还支持强大的基于OGNL动态sql的编写。 2. Maven MyBatis搭建 基础脚手架效果如图 需要配置的几项内容 (1).pom文件 (2).mybatis.xml文件 (3).pojo类 (4).数据库映射XML (5).创建数据库操作对应的接口 (6).控制器 第一项配置pom文件需要加入两个maven包一个是数据库连接驱动一个是mybatis dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.31/version /dependency dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.6/version /dependency第二项添加mybatis.xml文件 ?xml version1.0 encodingUTF-8 ? !DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd configurationsettings!--当返回行的所有列都是空时MyBatis默认返回null--setting namereturnInstanceForEmptyRow valuetrue/!--显示sql语句-- setting namelogImpl valueSTDOUT_LOGGING//settingsenvironments defaultdevelopmentenvironment iddevelopment!--使用了 JDBC 的提交和回滚设置它依赖于从数据源得到的连接来管理事务作用域--transactionManager typeJDBC/!-- mybatis提供了3种数据源类型分别是POOLED,UNPOOLED,JNDI --!-- POOLED 表示支持JDBC数据源连接池 --!-- UNPOOLED 表示不支持数据源连接池 --!-- JNDI 表示支持外部数据源连接池 --dataSource typePOOLEDproperty namedriver valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/gxa/property nameusername valueroot/property namepassword value123456//dataSource/environment/environmentsmappers!-- 映射文件方式1一个一个的配置mapper resourcecn/thinknovo/pojo/UserMapper.xml/--!-- 映射文件方式2自动扫描包内的Mapper接口与配置文件 --package namecn/thinknovo/pojo//mappers /configuration 第三项pojo类创建一个类名与数据库相同属性名和数据库字段名相同的pojo对象。 第四项数据库映射XML文件 ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd !-- namespace一般定义为 包名类名 -- mapper namespacecn.thinknovo.pojo.UserMapperselect idselectUser resultTypecn.thinknovo.pojo.Userselect * from user;/selectinsert idinsertUser parameterTypecn.thinknovo.pojo.Userinsert into user values (#{id},#{username},#{password});/insert /mapper第五项定义数据库操作接口这里需要注意的是mybatis以此接口为调用入口通过此接口对应的方法来检查并对应mapper.xml文件中的增删改查 public interface UserMapper {// 方法名、参数类型、返回类型要和mapper.xml文件中的id相同ListUser selectUser();void insertUser(User user); }第六项创建控制器–测试 public class MybatisConsole {public static void main(String[] args) {try {Reader reader Resources.getResourceAsReader(mybatis.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(reader);SqlSession session sqlSessionFactory.openSession();UserMapper userMapper session.getMapper(UserMapper.class);ListUser userList userMapper.selectUser();System.out.println(userList);session.close();} catch (IOException e) {e.printStackTrace();}} }至此基础脚手架搭建完成 3. Mapper.xml文件的注册和自动扫描 在mybatis.xml文件中可以直接使用package的方式来完成自动扫描这样以后就不需要一个个的添加mapper.xml文件了 mappers!-- 映射文件方式1一个一个的配置mapper resourcecn/thinknovo/pojo/UserMapper.xml/--!-- 映射文件方式2自动扫描包内的Mapper接口与配置文件 --package namecn/thinknovo/pojo//mappers4.解决后台提示找不到对应xml文件 Idea默认找不到对应的xml配置路径在pom文件的build标签中加入resource标签如下代码 resourcesresourcedirectorysrc/main/java/directoryincludesinclude**/*.xml/include/includes/resource /resources 5.两种处理操作数据库的方式 (1).通过session得到对应的Mapper接口对象然后由此对象调用对应的操作方法例如 Reader reader Resources.getResourceAsReader(mybatis.xml); SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(reader); SqlSession session sqlSessionFactory.openSession(); UserMapper userMapper session.getMapper(UserMapper.class); ListUser userList userMapper.selectUser(); System.out.println(userList);(2).通过session直接调用接口中对应的操作方法 // 第一个参数对应接口中的方法名 session.selectList(selectUser);(PS注意在这里接口文件和Mapper.xml文件是必须的缺一不可可以通过删除对应的文件来测试执行结果。) 6.关闭自动提交事务 这里注意只有执行增、删、改的时候才需要提交事务查询是不需要事务的在操作完对应的增删改之后执行session.commit(); PS:注意mybatis默认事务就关闭了自动提交可以通过接口查看 7.Xml配置方式的增删改查 首先配置mapper.xml文件 !-- namespace一般定义为 包名文件名 -- mapper namespacecn.thinknovo.pojo.UserMapperselect idselectUser resultTypecn.thinknovo.pojo.Userselect * from user; /selectinsert idinsertUser parameterTypecn.thinknovo.pojo.Userinsert into user values (#{id},#{username},#{password}); /insertupdate idupdateUser parameterTypecn.thinknovo.pojo.Userupdate user set username#{username},password#{password} where id#{id}; /updatedelete iddeleteUser parameterTypejava.lang.Stringdelete from user where id#{id}; /delete /mapper然后在修改接口代码 public interface UserMapper {// 方法名、参数类型、返回类型要和mapper.xml文件中的id相同ListUser selectUser();void insertUser(User user);void updateUser(User user);void deleteUser(String id); }在控制器中调用接口中指定的四个方法就可以完成基本的增删改查 在控制器中调用接口中指定的四个方法就可以完成基本的增删改查 8.多参数传递 在项目中多参数传递更多的是基于pojo对象或者map结构传递但是也可能有需要多个形式参数传递比如这样 UserMapper.insertUserByPassword(think12345,54321);这种情况配置文件需要做对应的处理改成下面的样子 insert idinsertUserByPassword parameterTypejava.lang.Stringinsert into user values(null,#{param1},#{param2}); /insertparam1代表获取第一个形式参数依次类推 param1代表获取第一个形式参数依次类推 也可以这样 insert idinsertUserByPassword parameterTypejava.lang.Stringinsert into user values(null,#{arg0},#{arg1}); /insertarg0代表获取第一个形式参数依次类推 arg0代表获取第一个形式参数依次类推 如果有更多的这样的形式参数就递增数字比如第三个就是parma3或者arg2在动态配置sql的时候根据需要可以任意调换顺序比如可以换成下面的效果 insert idinsertUserByPassword parameterTypejava.lang.Stringinsert into user values(null,#{arg1},#{arg0}); /insertarg0还是代表第一个参数arg1还是代表第二个参数不受影响。 arg0还是代表第一个参数arg1还是代表第二个参数不受影响。 还可以这样写 在接口中声明方法 /** * mybatis 把参数转换为 map 了,其中Param(key) 参数内 容就是 map 的 value * param name * param pwd * return */ ListUser selByNamePwd(Param(name) String userName,Param(pwd) String userPwd);在 mapper.xml 中添加 #{} 里面写Param(“内容”)参数中内容 !-- 当多参数时,不需要写 parameterType -- select id selByNamePwd resultTypeUser select * from User where name#{name} and pwd#{pwd} /select9.Java中的Map结构传递 如果在项目中需要多参数传递更建议大家使用java.util.map的结构传递这也是大部分项目使用的方式mybatis会根据key来对应获取value值设置的传递类型还是parameterType比如这样 insert idinsertUserByUserAndPassword parameterTypemap insert into user values(null,#{username},#{password}); /insert10.Map结构传递 如果要定义为map结构传递需要在mybatis.xml中定义map的结构方式比如这样 parameterMap iduserMap typecn.thinknovo.pojos.Userparameter propertyusername javaTypejava.lang.String/parameter propertypassword javaTypejava.lang.String/ /parameterMap 这里的id就是map引入的名字我们在传递参数类型设定为map以后就可以使用比如 insert idinsertUserByUserAndPassword2 parameterMapuserMap insert into user values(null,#{username},#{password}); /insert11.注解的使用 删除mapper.xml文件然后在接口文件中通过注解的方式添加sql语句 public interface UserMapper { // 方法名、参数类型、返回类型要和mapper.xml文件中的id相同 Select(select * from user) ListUser selectUser(); Insert(insert into user values (#{id},#{username},#{password})) void insertUser(User user); Update(update user set username#{username},password#{password} where id#{id}) void updateUser(User user); Delete(delete from user where id#{id}) void deleteUser(String id); }注意我们现在可以删除mybatis.xml中的mapper标签我们也可以在mybatis.xml文件中添加的mapper标签不再需要resource属性而是class属性如下 !-- 在配置文件中 关联包下的 接口类--mappersmapper classc.thinknovo.mybatis3.UserMapper//mappers12.动态SQL的if使用 – 非常重要 根据不同的条件执行不同的结果 select idselectUser resultTypecn.thinknovo.pojo.User parameterTypecn.thinknovo.pojo.Userselect * from userif testusername ! nullwhere username#{username}/if /select在配置文件中添加动态的if语句如果传递过来的user对象中username不等于null那么追加条件查询 13.动态SQL的where使用 如果我们有多个条件需要添加但是有可能一个条件都不满足那么这时候使用上面的方式就会出现问题所以我们还需要在if外部添加一个where标签 select idselectUser resultTypecn.thinknovo.pojo.User parameterTypecn.thinknovo.pojo.Userselect * from userwhereif testusername ! nullusername#{username}/ifif testpassword ! nulland password#{password}/if/where /select可以看到where包含了两个if而第一个if中没有andwhere标签会自动检查状态如果标签返回的第一个匹配内容是以 and或or 开头的则会自动删除and或者or 然后再追加where 14.动态SQL的choose when使用 select idselectUser resultTypecn.thinknovo.pojo.User parameterTypecn.thinknovo.pojo.Userselect * from user where password888888 wherechoosewhen testusername ! nullAND username#{username}/whenwhen testpassword ! nullAND password#{password}/whenotherwiseAND id#{id}/otherwise/choose where /selectChoose when 类似于java中的switch case任中只会走一个一般是在有一个条件固定的情况下需要额外不确定的条件时使用choose的方式 15.逆向工程mybatis-generator-maven-plugin (1)首先修改pom文件为下面的内容需要注意configurationFile标签是对应mybatis-generator的路径和文件名修改为自己想要的其余不做修改 ?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcn.thinknovo/groupIdartifactIdmybatis002/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingnamemybatis002 Maven Webapp/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.7/maven.compiler.sourcemaven.compiler.target1.7/maven.compiler.target/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.46/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.6/version/dependencydependencygroupIdorg.mybatis.generator/groupIdartifactIdmybatis-generator-core/artifactIdversion1.3.6/version/dependency/dependenciesbuildfinalNamemybatis002/finalNamepluginManagement!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --pluginspluginartifactIdmaven-clean-plugin/artifactIdversion3.0.0/version/plugin!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --pluginartifactIdmaven-resources-plugin/artifactIdversion3.0.2/version/pluginpluginartifactIdmaven-compiler-plugin/artifactIdversion3.7.0/version/pluginpluginartifactIdmaven-surefire-plugin/artifactIdversion2.20.1/version/pluginpluginartifactIdmaven-war-plugin/artifactIdversion3.2.0/version/pluginpluginartifactIdmaven-install-plugin/artifactIdversion2.5.2/version/pluginpluginartifactIdmaven-deploy-plugin/artifactIdversion2.8.2/version/plugin​ plugin ​ !--Mybatis-generator插件,用于自动生成Mapper和POJO-- ​ groupIdorg.mybatis.generator/groupId ​ artifactIdmybatis-generator-maven-plugin/artifactId ​ version1.3.6/version ​ configuration ​ !--配置文件的位置-- ​ configurationFilesrc\main\resources\mybatis-generator-config.xml/configurationFile ​ verbosetrue/verbose ​ overwritetrue/overwrite ​ /configuration ​ executions ​ execution ​ idGenerate MyBatis Artifacts/id ​ goals ​ goalgenerate/goal ​ /goals ​ /execution ​ /executions ​ dependencies ​ dependency ​ groupIdorg.mybatis.generator/groupId ​ artifactIdmybatis-generator-core/artifactId ​ version1.3.6/version ​ /dependency ​ /dependencies ​ /plugin ​ /plugins ​ /pluginManagement/build /project(2)接着添加mybatis-generator-config.xml文件注意修改 (1)classPathEntry为自己的数据库连接池jar包物理路径 (2)jdbcConnection为自己的数据库连接参数 (3)javaModelGenerator为实体类生成的位置 修改targetPackage和targetProject (4)sqlMapGenerator为*Mapper.xml 文件的位置 修改targetPackage和targetProject (5)javaClientGenerator为Mapper 接口文件的位置 修改targetPackage和targetProject (6)table为表对应内容多表就配置多个tableName表名 domainObjectName类名 完整配置如下 ?xml version1.0 encodingUTF-8 ?!DOCTYPE generatorConfiguration PUBLIC-//mybatis.org//DTD MyBatis Generator Configuration 1.0//ENhttp://mybatis.org/dtd/mybatis-generator-config_1_0.dtd generatorConfiguration​ !-- 本地数据库驱动程序jar包的全路径 -- ​ classPathEntry locationC:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar/​ !-- 指定mybatis版本 -- ​ context idcontext targetRuntimeMyBatis3 ​ commentGenerator ​ property namesuppressAllComments valuefalse/ ​ property namesuppressDate valuetrue/ ​ /commentGenerator​ !-- 数据库的相关配置 -- ​ jdbcConnection driverClasscom.mysql.jdbc.Driver ​ connectionURLjdbc:mysql://localhost:3306/hiber ​ userIdroot ​ passwordthinknovo/​ !--指定生成的类型为java类型避免数据库中number等类型字段 -- ​ javaTypeResolver ​ property nameforceBigDecimals valuefalse/ ​ /javaTypeResolver​ !-- 实体类生成的位置 修改targetPackage和targetProject-- ​ javaModelGenerator targetPackagecn.thinknovo.test targetProjectsrc/main/java ​ property nameenableSubPackages valuefalse/ ​ property nametrimStrings valuetrue/ ​ /javaModelGenerator​ !-- *Mapper.xml 文件的位置 修改targetPackage和targetProject-- ​ sqlMapGenerator targetPackagecn.thinknovo.test targetProjectsrc/main/java ​ property nameenableSubPackages valuefalse/ ​ /sqlMapGenerator​ !-- Mapper 接口文件的位置 修改targetPackage和targetProject-- ​ javaClientGenerator targetPackagecn.thinknovo.test targetProjectsrc/main/java ​ typeXMLMAPPER ​ property nameenableSubPackages valuefalse/ ​ /javaClientGenerator​ !-- 相关表的配置 多表就配置多个 tableName表名 domainObjectName类名 --table tableNameuser domainObjectNameUser enableCountByExamplefalseenableDeleteByExamplefalse enableSelectByExamplefalseenableUpdateByExamplefalse//context /generatorConfiguration(3)接着在idea右上角点击edit (4)开始配置mybatis-generator-maven-plugin运行 (5)输入运行命令mybatis-generator:generate -e (6)点击保存现在可以看到一个运行方式了点击运行就可以自动得到内容了 (7)运行生成对应的文件 16.一对一映射 类似于hibernate中的创建办法模拟一个人员对应一个学号创建两个pojo实体类下面代码省略了set、get方法 (1)第一个类是Iren人员类 public class Iren {private long id;private String renyuanname;private long xuehaoid;private Ixuehao ixuehao; // 添加一个学号类的对象(2)第二个类是Ixuehao学号类 public class Ixuehao {private long id;private String xuehao;(3)创建一个Irenmapper.xml文件 ?xml version1.0 encodingUTF-8 ?!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd !-- namespace一般定义为 包名文件名 -- mapper namespacecn.thinknovo.mybatis.pojo.IrenMapperselect idselectIren resultMapgetOneToOneMapselect t1.id,t1.renyuanname,t1.xuehaoid,t2.id,t2.xuehaofrom iren t1,ixuehao t2where t1.xuehaoid t2.id;/select ​ resultMap idgetOneToOneMap typecn.thinknovo.mybatis.pojo.Iren ​ id propertyid columnid/ ​ result propertyrenyuanname columnrenyuanname/ ​ result propertyxuehaoid columnxuehaoid/ ​ association propertyixuehao javaTypecn.thinknovo.mybatis.pojo.Ixuehao ​ id propertyid columnid/ ​ result propertyxuehao columnxuehao/ ​ /association ​ /resultMap /mapperPS这里使用到了resultMap标签此标签中创建一对一的映射关系在其中的id标签代表主键result标签代表普通字段association标签代表映射关系类 PS这里使用到了resultMap标签此标签中创建一对一的映射关系在其中的id标签代表主键result标签代表普通字段association标签代表映射关系类 (4)创建一个Irenmapper接口 public interface IrenMapper {ListIren selectIren(); }(5)创建一个Console测试 public static void main(String[] args) {try {Reader reader Resources.getResourceAsReader(mybatis.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(reader);SqlSession session sqlSessionFactory.openSession(false);IrenMapper irenMapper session.getMapper(IrenMapper.class); ListIren list irenMapper.selectIren();System.out.println(list.size());for(Iren iren : list) {System.out.println(iren.getRenyuanname());System.out.println(iren.getIxuehao().getXuehao());}session.close();} catch (IOException e) {e.printStackTrace();} }(6)反向一对一处理 在Ixuehao类中创建Iren的对象然后创建对应的Ixuehao的mapper接口和xml文件在配置resultMap时把前面配置的两个表的参数互换就可以实现反向一对一。 select idselectIxuehao resultMapgetOneToOneMapselect t1.id,t1.renyuanname,t1.xuehaoid,t2.id,t2.xuehaofrom iren t1,ixuehao t2where t1.xuehaoid t2.id; /select resultMap idgetOneToOneMap typecn.thinknovo.mybatis.pojo.Ixuehaoid propertyid columnid/result propertyxuehao columnxuehao/association propertyiren javaTypecn.thinknovo.mybatis.pojo.Irenid propertyid columnid/result propertyrenyuanname columnrenyuanname/result propertyxuehaoid columnxuehaoid//association /resultMap17.一对多映射 基于班级和学生的关系建立映射set、get方法省略 (1)第一个类是Iclass班级类 public class Iclass {private long id;private String cname;private ListIstudent list; // 这个班级中所有的学生(2)第二个类是Istudent学生类 public class Istudent {private long id;private String sname;private long cid;(3)创建IclassMapper.xml文件 ?xml version1.0 encodingUTF-8 ?!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd !-- namespace一般定义为 包名文件名 -- mapper namespacecn.thinknovo.mybatis.pojo.IclassMapperselect idselectIclass resultMapgetOneToManyMapselect t1.id,t1.cname,t2.id id2,t2.sname,t2.cidfrom iclass t1,istudent t2where t1.id t2.cid and t1.id4;/select​ resultMap idgetOneToManyMap typecn.thinknovo.mybatis.pojo.Iclass ​ id propertyid columnid/ ​ result propertycname columncname/ ​ collection propertylist ofTypecn.thinknovo.mybatis.pojo.Istudent ​ id propertyid columnid2/ ​ result propertysname columnsname/ ​ result propertycid columncid/ ​ /collection ​ /resultMap /mapperPS这里注意的是一对多使用的collection标签并且mybatis自身bug导致当两张表的主键同名时list中只有一个对象解决这个问题的办法是把其中一个主键id改一个别名 PS这里注意的是一对多使用的collection标签并且mybatis自身bug导致当两张表的主键同名时list中只有一个对象解决这个问题的办法是把其中一个主键id改一个别名 (4)创建一个Iclassmapper接口 public interface IclassMapper {Iclass selectIclass(); }(5)创建一个Console测试 public static void main(String[] args) {try {Reader reader Resources.getResourceAsReader(mybatis.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(reader);SqlSession session sqlSessionFactory.openSession(false);IclassMapper iclassMapper session.getMapper(IclassMapper.class);Iclass iclass iclassMapper.selectIclass();System.out.println(iclass.getCname());System.out.println(iclass.getList());for(Istudent istudent : iclass.getList()) {System.out.println(istudent.getSname());}session.close();} catch (IOException e) {e.printStackTrace();} }(6)反向多对一处理 在mybatis里面其实没有多对一的说法多对一只能看做是一对一所以我们需要在Istudent中增加Iclass对象 public class Istudent {private long id;private String sname;private long cid;private Iclass iclass; // 增加班级对象创建一个IstudentMapper.xml文件 ?xml version1.0 encodingUTF-8 ?!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd !-- namespace一般定义为 包名文件名 -- mapper namespacecn.thinknovo.mybatis.pojo.IstudentMapperselect idselectIstudent resultMapgetOneToOneMapselect t1.id,t1.cname,t2.id id2,t2.sname,t2.cidfrom iclass t1,istudent t2where t1.id t2.cid and t2.id2;/select​ resultMap idgetOneToOneMap typecn.thinknovo.mybatis.pojo.Istudent ​ id propertyid columnid2/ ​ result propertysname columnsname/ ​ result propertycid columncid/ ​ association propertyiclass javaTypecn.thinknovo.mybatis.pojo.Iclass ​ id propertyid columnid/ ​ result propertycname columncname/ ​ /association ​ /resultMap /mapperPS这里使用到的是一对一的处理法则所以使用的一对一的标签association PS这里使用到的是一对一的处理法则所以使用的一对一的标签association 然后创建IstudentMapper接口编写测试类完成这里省略… 18.多对多映射 还是基于订购商品操作一个用户可以对应多个商品一个商品可以对应多个订单其实在mybatis实现多对多映射操作类似于一对多映射只是SQL编写的相对复杂一些因为涉及到了中间表。 (1)第一个类是Ishangpin商品的类 public class Ishangpin {private long id;private String shangpinname;private ListIgoumai list; // list代表多个购买者(2)第二个类是Igoumai购买者的类 public class Igoumai {private long id;private String goumainame;(3)创建IshangpinMapper.xml文件 ?xml version1.0 encodingUTF-8 ?!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd !-- namespace一般定义为 包名文件名 -- mapper namespacecn.thinknovo.mybatis.pojo.IshangpinMapperselect idselectIshangpin resultMapgetManyToManyMapselectt1.shangpinid,t1.goumaiid,t2.id,t2.goumainame,t3.id id2,t3.shangpinnamefromidingdan t1,igoumai t2,ishangpin t3where t1.goumaiidt2.id and t1.shangpinidt3.id and t1.shangpinid6;/select​ resultMap idgetManyToManyMap typecn.thinknovo.mybatis.pojo.Ishangpin ​ id propertyid columnid2/ ​ result propertyshangpinname columnshangpinname/ ​ collection propertylist ofTypecn.thinknovo.mybatis.pojo.Igoumai ​ id propertyid columnid/ ​ result propertygoumainame columngoumainame/ ​ /collection ​ /resultMap /mapperPS这个配置文件中有多处需要注意的地方1.查看SQL的编写三表关联查询2.resultMap中涉及的还是collection标签3.两张表的id主键的名字不能相同必须保证其中一个是别名 PS这个配置文件中有多处需要注意的地方1.查看SQL的编写三表关联查询2.resultMap中涉及的还是collection标签3.两张表的id主键的名字不能相同必须保证其中一个是别名 (4)创建一个IshangpinMapper接口 public interface IshangpinMapper {ListIshangpin selectIshangpin(); }(5)创建一个Console测试 IshangpinMapper ishangpinMapper session.getMapper(IshangpinMapper.class); ListIshangpin list ishangpinMapper.selectIshangpin(); System.out.println(list); System.out.println(list.get(0).getShangpinname()); System.out.println(list.get(0).getList()); System.out.println(list.get(0).getList().get(0).getGoumainame());(6)反向多对多处理 原理和上述一致只需要在购买者中的增加商品的list并且配置购买者的mapper接口和XML文件即可。 19.缓存 一级缓存SqlSession 应用程序和数据库交互的过程是一个相对比较耗时的过程缓存存在的意义:让应用程序减少对数据库的访问,提升程序运行效率MyBatis 中默认 SqlSession 缓存开启 3.1 同一个 SqlSession 对象调用同一个时,只有第一次访问数据库,第一次之后把查询结果缓存到SqlSession缓存区(内存)中 3.2 缓存的是 statement 对象.(简单记忆必须是用一个是用一个),在 myabtis 时一个对应一个 statement 对象 3.3 有效范围必须是同一个 SqlSession 对象 缓存流程: 步骤一: 先去缓存区中找是否存在 statement 步骤二:返回结果 步骤三:如果没有缓存 statement 对象,去数据库获取数据 步骤四:数据库返回查询结果 步骤五:把查询结果放到对应的缓存区中 二级缓存SqlSessionFactory 缓存 有效范围:同一个 factory 内哪个 SqlSession 都可以获取 什么时候使用二级缓存当数据频繁被使用,很少被修改 使用二级缓存步骤 步骤一在 mapper.xml 中添加 步骤二如果不写 readOnly”true”需要把实体类序列化 cache readOnly” true”/ cache 步骤三当 SqlSession 对象 close()时或 commit()时会把 SqlSession 缓存的数据刷(flush)到 SqlSessionFactory 缓存区中 ngpin(); System.out.println(list); System.out.println(list.get(0).getShangpinname()); System.out.println(list.get(0).getList()); System.out.println(list.get(0).getList().get(0).getGoumainame()); (6)反向多对多处理 原理和上述一致只需要在购买者中的增加商品的list并且配置购买者的mapper接口和XML文件即可。## 缓存### 一级缓存SqlSession1. 应用程序和数据库交互的过程是一个相对比较耗时的过程 2. 缓存存在的意义:让应用程序减少对数据库的访问,提升程序运行效率 3. MyBatis 中默认 SqlSession 缓存开启 3.1 同一个 SqlSession 对象调用同一个select时,只有第一次访问数据库,第一次之后把查询结果缓存到SqlSession缓存区(内存)中 3.2 缓存的是 statement 对象.(简单记忆必须是用一个是用一个select),在 myabtis 时一个select对应一个 statement 对象 3.3 有效范围必须是同一个 SqlSession 对象 缓存流程: 步骤一: 先去缓存区中找是否存在 statement 步骤二:返回结果 步骤三:如果没有缓存 statement 对象,去数据库获取数据 步骤四:数据库返回查询结果 步骤五:把查询结果放到对应的缓存区中### 二级缓存SqlSessionFactory 缓存有效范围:同一个 factory 内哪个 SqlSession 都可以获取 什么时候使用二级缓存当数据频繁被使用,很少被修改 使用二级缓存步骤 步骤一在 mapper.xml 中添加 步骤二如果不写 readOnly”true”需要把实体类序列化 cache readOnly” true”/ cache 步骤三当 SqlSession 对象 close()时或 commit()时会把 SqlSession 缓存的数据刷(flush)到 SqlSessionFactory 缓存区中
http://www.tj-hxxt.cn/news/224185.html

相关文章:

  • 做网站一个人能做吗wordpress 微信二维码登录
  • 购物网站如何建设廊坊关键词排名推广
  • 专注七星彩网站开发网站建设费如何入帐
  • 学做网站在什么地方学品牌公司设计
  • 网站建设和网络营销温州哪里有网站
  • 住房城乡建设厅网站准考证温州 建网站的公司 新
  • 合肥建设工程交易网站wordpress 默认图片路径
  • frontpage新建网站中国城乡建设部网站证书查询
  • 网站建设排名优化公司wordpress用户插件
  • 网站设计学校网站优化的关键词
  • 做网站需要公司资料吗广东营销型网站
  • 邵阳县网站建设公司沙河网站建设公司邢台网页设计
  • 网站关键词部署大连网站建设价格
  • 苏州网站建设有限公司购物网页设计代码
  • 创新的o2o网站建设网站建设南沙
  • 四川省建设科技协会网站首页珠海市官网网站建设品牌
  • 博罗网站建设公司苏州建站费用
  • 一条龙搭建网站兰州装修公司前十名
  • 保定网站优化哪家好ppt模板免费素材
  • wordpress如何自动采集网站图片dz还是wordpress
  • 做招聘信息的网站校园官方网站建设
  • 手机网站的网址是什么原因十大免费代理ip软件
  • 安网站建设公司济宁住房和城乡建设局网站首页
  • 做英文网站 是每个单词首字母大写 还是每段落首字母大写网站建设创意广告
  • 网站小视频怎么做的网站专题模板下载
  • 网站建设中倒计时模板软件商店app下载安装
  • 义乌网站建设长春网络哪个好
  • 建站空间怎么选高新快速建设网站电话
  • 重庆服装网站建设地址网站建设的网站分析怎么写
  • dede5.7 做的网站 下 加一个discuz论坛网站设置为起始页