
基于新信息技术的Java-EE应用开发实训教程课件:MyBatis介绍.pptx
25页单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,MyBatis介绍,9.1 MyBatis架构,9.2 MyBatis下载,9.3 MyBatis入门程序,9.1 MyBatis架构,MyBatis架构如图9-1所示1)MyBatis配置SqlMapConfig.xml文件是MyBatis的全局配置文件,它配置了MyBatis的运行环境等信息mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句此文件需要在SqlMapConfig.xml中加载2)通过MyBatis环境等配置信息构造SqlSessionFactory即会话工厂3)由会话工厂创建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执行输入参数进行定义,包括HashMap、基本类型、POJO,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数7)Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、POJO,Executor通过Mapped Statement在执行sql后将输出结果映射至Java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程9.2 MyBatis下载,MyBaits的代码由管理,地址为https:/ MyBatis入门程序,实现以下功能:,根据用户名称查询一个用户信息根据用户名称模糊查询用户信息列表添加用户更新用户删除用户第一步:创建Java工程使用eclipse创建java工程,jdk使用1.7.0_72第二步:加入jar包如图9-3所示,加入MyBatis核心包、依赖包、数据驱动包第三步:创建log4j.properties在classpath下创建log4j.properties,代码如下:,#Global logging configuration,log4j.rootLogger=DEBUG,stdout,#Console output.,log4j.appender.stdout=org.apache.log4j.ConsoleAppender,log4j.appender.stdout.layout=org.apache.log4j.PatternLayout,log4j.appender.stdout.layout.ConversionPattern=%5p%t-%m%n,mybatis默认使用log4j作为输出日志信息。
第四步:创建SqlMapConfig.xml在classpath下创建SqlMapConfig.xml,代码如下:,SqlMapConfig.xml是MyBatis核心配置文件,上边文件的配置内容为数据源、事务管理第五步:po类po类作为MyBatis进行sql映射使用,po类通常与数据库表对应,User.java如下:,Public class User,private int id;,private String username;/用户姓名,private String sex;/性别,private Date birthday;/生日,private String address;/地址,get/set,第六步:程序编写1)实现查询功能映射文件在classpath下的sqlmap目录下创建sql映射文件Users.xml:,namespace:命名空间,用于隔离sql语句,后面会讲另一层非常重要的作用在SqlMapConfig.xml中添加:,select*from user where id=#id,select*from user where username like%$value%,parameterType:定义输入到sql中的映射类型,#id表示使用preparedstatement设置占位符号并将输入变量id传到sql。
resultType:定义结果映射类型加载映射文件MyBatis框架需要加载映射文件,将Users.xml添加在SqlMapConfig.xml,如下:,测试程序public class Mybatis_first,/会话工厂,private SqlSessionFactory sqlSessionFactory;,Before,public void createSqlSessionFactory()throws IOException,/配置文件,String resource=SqlMapConfig.xml;,InputStream inputStream=Resources.getResourceAsStream(resource);,/使用SqlSessionFactoryBuilder从XML配置文件中创建SqlSessionFactory,sqlSessionFactory=new SqlSessionFactoryBuilder(),.build(inputStream);,/根据名称查询用户信息,Test,public void testFindUserById(),/数据库会话实例,SqlSession sqlSession=null;,try,/创建数据库会话实例sqlSession,sqlSession=sqlSessionFactory.openSession();,/查询单个记录,根据用户名称查询用户信息,User user=sqlSession.selectOne(test.findUserById,10);,/输出用户信息,System.out.println(user);,catch(Exception e),e.printStackTrace();,finally,if(sqlSession!=null),sqlSession.close();,/根据用户名称模糊查询用户信息,Test,public void testFindUserByUsername(),/数据库会话实例,SqlSession sqlSession=null;,try,/创建数据库会话实例sqlSession,sqlSession=sqlSessionFactory.openSession();,/查询单个记录,根据用户名称查询用户信息,List list=sqlSession.selectList(test.findUserByUsername,张);,System.out.println(list.size();,catch(Exception e),e.printStackTrace();,finally,if(sqlSession!=null),sqlSession.close();,(2)实现添加功能。
映射文件在SqlMapConfig.xml中添加:,select LAST_INSERT_ID(),insert into user(username,birthday,sex,address),values(#username,#birthday,#sex,#address),测试程序/添加用户信息,Test,public void testInsert(),/数据库会话实例,SqlSession sqlSession=null;,try,/创建数据库会话实例sqlSession,sqlSession=sqlSessionFactory.openSession();,/添加用户信息,User 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();,Mysql自增主键返回。
通过修改sql映射文件,可以将Mysql自增主键返回:,select LAST_INSERT_ID(),insert into user(username,birthday,sex,address),values(#username,#birthday,#sex,#address);,添加selectKey实现将主键返回keyProperty:返回的主键存储在POJO中的哪个属性order:selectKey的执行顺序,相对于insert语句来说,由于Mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为afterresultType:返回的主键是什么类型LAST_INSERT_ID():Mysql的函数,返回auto_increment自增列新记录ID值Mysql使用 uuid实现主键需要通过select uuid()得到uuid值:,select uuid(),insert into user(id,username,birthday,sex,address),values(#id,#username,#birthday,#sex,#address),注意,此处使用的order是“BEFORE”。
3)实现删除功能映射文件在SqlMapConfig.xml中添加:,delete from user where id=#id,测试程序/根据名称删除用户,Test,public void testDelete(),/数据库会话实例,SqlSession sqlSession=null;,try,/创建数据库会话实例sqlSession,sqlSession=sqlSessionFactory.openSession();,/删除用户,sqlSession.delete(test.deleteUserById,18);,/提交事务,sqlSmit();,catch(Exception e),e.printStackTrace();,finally,if(sqlSession!=null),sqlSession.close();,。
