21spri视频教程my电商项目商城源码框架黑28期02教案day_第1页
21spri视频教程my电商项目商城源码框架黑28期02教案day_第2页
21spri视频教程my电商项目商城源码框架黑28期02教案day_第3页
21spri视频教程my电商项目商城源码框架黑28期02教案day_第4页
21spri视频教程my电商项目商城源码框架黑28期02教案day_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2、Mybatis 的入门a) 使用 jdbc 操作数据库b) Mybatis 的架构c) Mybatis 的入门程序3、Dao 的开发方法a)原始 dao 的开发方法的问题b)动态方式4、SqlMapConfig.xml 文件说明第二天:1、输入和输出a) 输入参数b) 返回值2、动态 sql3、关联a) 一对一关联b) 一对多关联4、Mybatis 整合 spring2 MyBatisMyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache softwarefoundation 迁移到了code,并且改名为MyBatis 。2013年11月迁移到。,使开

2、发者MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行只需要关注 SQL 本身,而不需要花费精力去处理例如驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行生成最终执行的sql语句,最后由mybatis框架执行sql并将结果返回。成java对象并3 使用 jdbc 编程问题总结3.1 创建 mysq

3、l 数据库先导入创建数据库的 sql导入到数据库中。北京市昌平区建材城西路龙办公楼一层:3.2 创建工程开发环境:eclipse marsJdk:1.71、创建一个 java 工程。2、导入 jar 包。此时需要 mysql 的数据库驱动。3.3 jdbc 编程步骤:1、 加载数据库驱动2、 创建并获取数据库3、 创建 jdbc statement 对象4、 设置 sql 语句5、 设置 sql 语句中的参数(使用 preparedStatement)6、 通过 statement 执行 sql 并获取结果7、 对 sql 执行结果进行处理8、(resultSet、preparedstatem

4、ent、connection)北京市昌平区建材城西路龙办公楼一层:3.4 jdbc 程序北京市昌平区建材城西路龙办公楼一层:publicstaticvoid main(String args) Connection connection = null;PreparedStatement preparedStatement = null; ResultSet resultSet = null;try /加载数据库驱动Class.forName("com.mysql.jdbc.Driver");/通过驱动管理类获取数据库connection =DriverManager.get

5、Connection("jdbc:mysql:/localhost:3306/mybatis?charac terEncoding=utf-8", "root", "root");/定义sql语句 ?表示占位符String sql = "select * from user where username = ?"/获取预处理statementpreparedStatement = connection.prepareStatement(sql);/设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数

6、为设置的参数值preparedStatement.setString(1, "");/向数据库发出sql执行,出结果集resultSet = preparedStatement.executeQuery();/遍历结果集while(resultSet.next()System.out.println(resultSet.getString("id")+""+resultSet.getString( "username"); catch (Exception e) e.printStackTrace();finall

7、y/if(resultSet!=null) try resultSet.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace();if(preparedStatement!=null) try 上边使用 jdbc 的原始方法()实现了数据库表的操作。3.5 jdbc 问题总结如下:1、 数据库创建、频繁造成系统浪费从而影响系统性能,如果使用数据库解决此问题。2、 Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。3

8、、 使用 preparedStatement 向占有位符号传参数硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。4、 对结果集如果能将数据库硬编码(列名),sql 变化导致代码变化,系统不易维护,成 pojo 对象比较方便。4 Mybatis 架构北京市昌平区建材城西路龙办公楼一层:preparedStatement.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace();if(connection!=null) t

9、ry connection.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace();1、 mybatis 配置SqlMapConfig.xml,此文件作为 mybatis 的全局配置文件,配置了 mybatis 的运行环境等信息。mapper.xml 文件即 sql SqlMapConfig.xml 中加载。文件,文件中配置了操作数据库的 sql 语句。此文件需要在2、 通过 mybatis 环境等配置信息构造 SqlSessionFactory 即会话工厂3、 由会话工厂创建

10、sqlSession 即会话,操作数据库需要通过 sqlSession 进行。4、 mybatis 底层自定义了 Executor 执行器接口操作数据库,Executor 接口有两个实现,一个是基本执行器、一个是缓存执行器。5、 Mapped Statement 也是 mybatis 一个底层对象,它包装了 mybatis 配置信息及 sql信息等。mapper.xml 文件中一个 sql 对应一个 Mapped Statement 对象,sql 的 id 即是 Mapped statement 的 id。6、 Mapped Statement 对sql 执行输入参数进行定义,包括HashMa

11、p、基本类型、pojo,Executor通过 Mapped Statement 在执行 sql 前将输入的 java 对象是 jdbc 编程中对 preparedStatement 设置参数。至 sql 中,输入参数就7、 Mapped Statement 对sql 执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement 在执行 sql 后将输出结果至 java 对象中,输出结果过程相当于 jdbc 编程中对结果的处理过程。北京市昌平区建材城西路龙办公楼一层:Pojo5 Mybatis 入门程序5.1 mybatismybaits

12、的代码由.com 管理,地址:mybatis-3.2.7.jarmybatis 的libmybatis 的依赖包包mybatis-3.2.7.pdfmybatis 使用手册5.2 需求实现以下功能: 根据用户 id一个用户信息根据用户名称模糊添加用户更新用户删除用户用户信息列表5.3 工程搭建5.3.1 第一步:创建 java 工程使用 eclipse 创建 java 工程,jdk 使用 1.7.0_72。北京市昌平区建材城西路龙办公楼一层:5.3.2 第二步:加入 jar 包加入 mybatis包、依赖包、数据驱动包。5.3.3 第三步:perties在 classpath

13、 下创建 perties 如下:mybatis 默认使用 log4j 作为输出日志信息。5.3.4 第四步:SqlMapConfig.xml在 classpath 下创建 SqlMapConfig.xml,如下:北京市昌平区建材城西路龙办公楼一层:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//DTD Config 3.0/EN"""><configurati

14、on><!- 和spring整合后 environments配置将-><environmentsdefault="development"><environmentid="development"><!- 使用jdbc事务管理-># Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output.log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4

15、j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p %t - %m%nSqlMapConfig.xml 是 mybatis配置文件,上边文件的配置内容为数据源、事务管理。5.3.5 第五步:po 类Po 类作为 mybatis 进行 sql使用,po 类通常与数据库表对应,User.java 如下:5.3.6 第六步:sql文件在 classpath 下的 sqlmap 目录下创建 sql文件 Users.xml:""

16、;>北京市昌平区建材城西路龙办公楼一层:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//DTD Mapper 3.0/EN"Publicclass User privateintid;private String username;/ 用户private String sex;/private Date birthday;/ 生日private String address;/ 地址get/set<transa

17、ctionManagertype="JDBC"/><!- 数据库连接池-><dataSourcetype="POOLED"><propertyname="driver"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql:/localhost:3306/mybat is?characterEncoding=utf-8"/><proper

18、tyname="username"value="root"/><propertyname="password"value="root"/></dataSource></environment></environments></configuration>namespace :命名空间,用于sql 语句,后面会讲另一层非常重要的作用。5.3.7 第七步:加载文件mybatis 框架需要加载文件,将 Users.xml 添加在 SqlMapConfig.

19、xml,如下:5.4 根据 id用户信息文件:5.4.1在 user.xml 中添加:parameterType:定义输入到 sql 中的置占位符号并将输入变量 id 传到 sql。resultType:定义结果类型。类型,#id表示使用 preparedstatement 设5.4.2 测试程序:北京市昌平区建材城西路龙办公楼一层:publicclass Mybatis_first /会话工厂private SqlSessionFactory sqlSessionFactory;Beforepublicvoid createSqlSessionFactory() throws IOExcep

20、tion / 配置文件String resource = "SqlMapConfig.xml"<!- 根据id获取用户信息 -><selectid="findUserById"parameterType="int"resultType="cn.itcast.myb atis.po.User">select * from user where id = #id</select><mappers><mapperresource="sqlmap/User.x

21、ml"/></mappers><mappernamespace="test"></mapper>5.5 根据用户名用户信息文件:5.5.1在 user.xml 中添加:北京市昌平区建材城西路龙办公楼一层:<!- 自定义条件用户列表 -><selectid="findUserByUsername"parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">se

22、lect * from user where username like '%$value%'</select>InputStream inputStream = Resources.getResourceAsStream(resource);/ 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);/ 根据 id用户信息Testpublicvoid testFindUser

23、ById() / 数据库会话实例SqlSession sqlSession = null; try / 创建数据库会话实例sqlSessionsqlSession = sqlSessionFactory.openSession();/单个,根据用户id用户信息User user = sqlSession.selectOne("test.findUserById",10);/ 输出用户信息System.out.println(user); catch (Exception e) e.printStackTrace(); finally if (sqlSession != nu

24、ll) sqlSession.close();parameterType:定义输入到 sql 中的做字符串的拼接。类型,$value表示使用参数将$value替换,注意:如果是取简单数量类型的参数,括号中的值必须为 valueresultType:定义结果类型。5.5.2 测试程序:5.6 小结5.6.1 #和$#表示一个占位符号,通过#可以实现 preparedStatement 向占位设置值,自动进行 java类型和 jdbc 类型转换,#可以有效防止 sql 注入。 #可以接收简单类型值或 pojo 属性值。如果 parameterType 传输单个简单类型值,#括号中可以是 value

25、 或其它名称。$表示拼接 sql 串,通过$可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类北京市昌平区建材城西路龙办公楼一层:/ 根据用户名称模糊用户信息Testpublicvoid testFindUserByUsername() / 数据库会话实例SqlSession sqlSession = null; try / 创建数据库会话实例sqlSessionsqlSession = sqlSessionFactory.openSession();/单个,根据用户id用户信息List<User> list = sqlSession.selec

26、tList("test.findUserByUsername", "张");System.out.println(list.size(); catch (Exception e) e.printStackTrace(); finally if (sqlSession != null) sqlSession.close();型转换, $可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,$括号中只能是 value。5.6.2 parameterType 和 resultTypeparameterType:指定输入参

27、数类型,mybatis 通过 ognl 从输入对象中获取参数值拼接在 sql中。resultType:指定输出结果类型,mybatis 将 sql指定类型的对象。结果的一行数据为 resultType5.6.3 selectOne 和 selectListselectOne一条,如果使用 selectOne多条则抛出异常:org.apache.ibatis.exceptions.TooManyResultsException: Expected one result(or null) to be returned by selectOne(), but found: 3 atorg.apach

28、e.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)selectList 可以一条或多条。5.7 添加用户文件:5.7.1在 SqlMapConfig.xml 中添加:5.7.2 测试程序:/ 添加用户信息北京市昌平区建材城西路龙办公楼一层:<!- 添加用户 -><insertid="insertUser"parameterType="cn.itcast.mybatis.po.User"> insert into user(

29、username,birthday,sex,address) values(#username,#birthday,#sex,#address)</insert>5.7.3 mysql 自增主键返回通过修改 sql文件,可以将 mysql 自增主键返回:添加 selectKey 实现将主键返回keyProperty:返回的主键在 pojo 中的哪个属性order:selectKey 的执行顺序,是相对与 insert 语句来说,由于 mysql 的自执行完 insert 语句之后主键生成,所以这里 selectKey 的执行顺序为 afterresultType:返回的主键是什么类

30、型LAST_INSERT_ID():是 mysql 的函数,返回 auto_increment 自增列新id 值。北京市昌平区建材城西路龙办公楼一层:<insertid="insertUser"parameterType="cn.itcast.mybatis.po.User"><!- selectKey将主键返回,需要再返回 -><selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Integer"

31、>select LAST_INSERT_ID()</selectKey>insert into user(username,birthday,sex,address) values(#username,#birthday,#sex,#address);</insert>Testpublicvoid testInsert() / 数据库会话实例SqlSession sqlSession = null; try / 创建数据库会话实例sqlSessionsqlSession = sqlSessionFactory.openSession();/ 添加用户信息User

32、user = new User(); user.setUsername(""); user.setAddress("河南郑州"); user.setSex("1"); user.setPrice(1999.9f);sqlSession.insert("test.insertUser", user);/提交事务sqlSmit(); catch (Exception e) e.printStackTrace(); finally if (sqlSession != null) sqlSession.close();5.

33、7.4 Mysql 使用 uuid 实现主键需要增加通过 select uuid()得到 uuid 值<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"><selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">select uuid()</selectKey>insert into user(

34、id,username,birthday,sex,address) values(#id,#username,#birthday,#sex,#address)</insert>注意这里使用的 order 是“BEFORE”5.8 删除用户文件:.2 测试程序:北京市昌平区建材城西路龙办公楼一层:/ 根据id删除用户TestpublicvoidtestDelete() / 数据库会话实例SqlSession sqlSession = null; try / 创建数据库会话实例sqlSessionsqlSession = sqlSessionFactory.openSe

35、ssion();<!- 删除用户 -><deleteid="deleteUserById"parameterType="int"> delete from user where id=#id</delete>5.9 修改用户文件.2 测试程序北京市昌平区建材城西路龙办公楼一层:/ 更新用户信息TestpublicvoidtestUpdate() / 数据库会话实例SqlSession sqlSession = null; try / 创建数据库会话实例sqlSessionsqlSession = sql

36、SessionFactory.openSession();/ 添加用户信息User user = new User(); user.setId(16); user.setUsername("");user.setAddress("河南郑州");<!- 更新用户 -><updateid="updateUser"parameterType="cn.itcast.mybatis.po.User"> update user setusername=#username,birthday=#birthd

37、ay,sex=#sex,address=#address where id=#id</update>/ 删除用户sqlSession.delete("test.deleteUserById",18);/ 提交事务sqlSmit(); catch (Exception e) e.printStackTrace(); finally if (sqlSession != null) sqlSession.close();5.10 Mybatis 解决 jdbc 编程的问题1、 数据库创建、频繁造成系统浪费从而影响系统性能,如果使用数据库解决此问题。解决:在 SqlMa

38、pConfig.xml 中配置数据池,使用连接池管理数据库。2、 Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。解决:将 Sql 语句配置在Xmapper.xml 文件中与 java 代码分离。3、 向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数一一对应。解决:Mybatis 自动将 java 对象至 sql 语句,通过 statement 中的 parameterType 定义输入参数的类型。4、 对结果集麻烦,sql 变化导致代码变化,且前需要遍历,如果能将数据库成

39、 pojo 对象比较方便。解决:Mybatis 自动将 sql 执行结果义输出结果的类型。至 java 对象,通过 statement 中的 resultType 定5.11 mybatis 与 hibernate 不同Mybatis 和 hibernate 不同,它全是一个 ORM 框架,因为 MyBatis 需要程序员编写 Sql 语句,不过 mybatis 可以通过XML 或注解方式灵活配置要运行的 sql 语句,并将 java对象和 sql 语句生成最终执行的 sql,最后将 sql 执行的结果再生成 java 对象。Mybatis 学习门槛低,简单易学,程序员直接编写原sql,可严格

40、sql 执行性能,北京市昌平区建材城西路龙办公楼一层:user.setSex("1"); user.setPrice(1999.9f);sqlSession.update("test.updateUser", user);/ 提交事务sqlSmit(); catch (Exception e) e.printStackTrace(); finally if (sqlSession != null) sqlSession.close();灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求

41、变化要求成果输出迅速。但是灵活的前提是mybatis 无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套 sql文件,工作量大。Hibernate 对象/关系能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用 hibernate 开发可以节省很多代码,提高效率。但是 Hibernate的学习门槛高,要精通门槛更高,而且怎么设计 O/R衡,以及怎样用好 Hibernate 需要具有很强的经验和能力,在性能和对象模型之间如何权。总之,按照用户的需求在有限的环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。6 Dao

42、 开发方法使用 Mybatis 开发 Dao,通常有两个方法,即原始 Dao 开发方法和 Mapper 接口开发方法。6.1 需求将下边的功能实现 Dao:根据用户 id一个用户信息根据用户名称模糊添加用户信息用户信息列表6.2 SqlSession 的使用范围SqlSession 中了对数据库的操作,如:、更新、删除等。通过 SqlSessionFactory 创建 SqlSession,而 SqlSessionFactory 是通过 SqlSessionFactoryBuilder进行创建。6.2.1 SqlSessionFactoryBuilderSqlSessionFactoryBui

43、lder 用于创建 SqlSessionFacoty,SqlSessionFacoty 一旦创建完成就不需要 SqlSessionFactoryBuilder 了,因为 SqlSession 是通过 SqlSessionFactory 生产,所以可以将 SqlSessionFactoryBuilder 当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。北京市昌平区建材城西路龙办公楼一层:6.2.2 SqlSessionFactorySqlSessionFactory 是一个接口,接口中定义了 openSession 的不同重载方法, SqlSessionFactory 的最佳使用范

44、围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理 SqlSessionFactory。6.2.3 SqlSessionSqlSession 是一个面向用户的接口, sqlSession 中定义了数据库操作方法。每个线程都应该有它的 SqlSession 实例。SqlSession 的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将 SqlSession 实例的一个类的静态字段或实例字段中。放在打开一个 SqlSession;使用完毕就要关闭它。通常把这个关闭操作放到确保每次都能执行关闭。如下:块中以finally6.3 原始 Dao 开发方式原始

45、 Dao 开发方法需要程序员编写 Dao 接口和 Dao 实现类。文件6.3.1北京市昌平区建材城西路龙办公楼一层:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//DTD Mapper 3.0/EN"""><mappernamespace="test"><!- 根据id获取用户信息 -><selectid="findUserById&qu

46、ot;parameterType="int"resultType="cn.itcast.myb atis.po.User">select * from user where id = #id</select>SqlSession session = sqlSessionFactory.openSession(); try / do work finally session.close();6.3.2 Dao 接口北京市昌平区建材城西路龙办公楼一层:Publicclass UserDaoImpl implements UserDao /注

47、入SqlSessionFactorypublic UserDaoImpl(SqlSessionFactory sqlSessionFactory)this.setSqlSessionFactory(sqlSessionFactory);private SqlSessionFactory sqlSessionFactory; Overridepublic User getUserById(int id) throws Exception SqlSession session = sqlSessionFactory.openSession(); User user = null;try /通过sq

48、lsession调用selectOne方法获取一条结果集/参数1:指定定义的statement的id,参数2:指定向statement中传递的参数user = session.selectOne("test.findUserById", 1); System.out.println(user); finallysession.close();return user;Publicinterface UserDao public User getUserById(int id) throws Exception;publicvoid insertUser(User user)

49、throws Exception;<!- 添加用户 -><insertid="insertUser"parameterType="cn.itcast.mybatis.po.User"><selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Integer">select LAST_INSERT_ID()</selectKey>insert into user(username,bir

50、thday,sex,address) values(#username,#birthday,#sex,#address)</insert></mapper>6.3.3 Dao 测试创建一个 JUnit 的测试类,对 UserDao 进试。6.3.4 问题原始 Dao 开发中以下问题:u Dao 方法体重复代码:通过 SqlSessionFactory 创建 SqlSession,调用 SqlSession 的数据库操作方法u 调用 sqlSession 的数据库操作方法需要指定 statement 的 id,这里得于开发维护。硬编码,不北京市昌平区建材城西路龙办公楼一层

51、:private SqlSessionFactory sqlSessionFactory;Beforepublicvoid init() throws Exception SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder(); InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml"); sqlSessionFactory = sessionFactoryBuilder.buil

52、d(inputStream);TestpublicvoidtestGetUserById() UserDao userDao = new UserDaoImpl(sqlSessionFactory); User user = userDao.getUserById(22); System.out.println(user);OverridePublicvoid insertUser(User user) throws Exception SqlSession sqlSession= sqlSessionFactory.openSession(); try sqlSession.insert(&

53、quot;insertUser", user); sqlSmit(); finallysession.close();6.4 Mapper 动态方式6.4.1 开发规范Mapper 接口开发方法只需要程序员编写 Mapper 接口(相当于 Dao 接口),由 Mybatis框架根据接口定义创建接口的动态对象, 法。Mapper 接口开发需要遵循以下规范:对象的方法体同上边 Dao 接口实现类方1、 Mapper.xml 文件中的 namespace 与 mapper 接口的类路径相同。2、 Mapper 接口方法名和 Mapper.xml 中定义的每个 statement 的 id

54、相同3、 Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的 parameterType 的类型相同4、 Mapper 接口方法的输出参数类型和mapper.xml 中定义的每个 sql 的resultType 的类型相同文件)6.4.2 Mapper.xml(定义 mapper文件 UserMapper.xml(内容同 Users.xml),需要修改 namespace 的值为UserMapper 接口路径。将 UserMapper.xml 放在 classpath下 mapper 目录下。北京市昌平区建材城西路龙办公楼一层:<?xmlversion

55、="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//DTD Mapper 3.0/EN"""><mappernamespace="cn.itcast.mybatis.mapper.UserMapper"><!- 根据id获取用户信息 -><selectid="findUserById"parameterType="int"resultType

56、="cn.itcast.myb atis.po.User">select * from user where id = #id</select><!- 自定义条件用户列表 -><selectid="findUserByUsername"parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">select * from user where username like '%$val

57、ue%'</select><!- 添加用户 -><insertid="insertUser"parameterType="cn.itcast.mybatis.po.User"><selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Integer">select LAST_INSERT_ID()6.4.3 Mapper.java(接口文件)接口定义有如下特点:1、 Mapper 接口方法名和 Mapper.xml 中定义的 statement 的 id 相同2、 Mapper 接口方法的输入参数类型和mapper.xml 中定义的statement 的 parameterType 的类型相同3、 Mapper 接口方法的输出参数类型和mapper.xml 中定义的statement 的resultType 的类型相同6.4.4 加载 UserMapper.xml 文件修改 SqlMapConfig.xml 文件:北京市昌平区建材城西路龙办公楼一层:<!- 加载文件 -><

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论