食品饮料网站建设,怎样做门窗网站,做衬衣的网站,wordpress 获取category id2 示例12.1 创建2.1.1 创建项目新建Maven项目#xff0c;然后直接下一步。展开三角填写信息#xff0c;最后一行版本不填#xff0c;直接用默认的。然后完成。进度条走完后#xff0c;点文件#xff0c;设置#xff0c;展开编辑器#xff0c;在点文件和代码模板。然后先…2 示例12.1 创建2.1.1 创建项目新建Maven项目然后直接下一步。展开三角填写信息最后一行版本不填直接用默认的。然后完成。进度条走完后点文件设置展开编辑器在点文件和代码模板。然后先点加号在输入名称和扩展名再在下面黑框里输入以下代码。下面框全部勾选。?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespace /mapper步骤同上但是只勾选第一个框。上面的操作只是保存到模版里还需要在项目中创建。这个是主配置文件在resources目录下创建SqlMapConfig.xml的配置文件其实名称可以任意具体解释见11导入对应的约束编写主配置文件。?xml version1.0 encodingUTF-8? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration environments defaultmysql environment idmysql !--配置事务的类型使用本地事务策略-- transactionManager typeJDBC/transactionManager !--是否使用连接池 POOLED表示使用链接池UNPOOLED表示不使用连接池-- dataSource typePOOLED property namedriver valuecom.mysql.jdbc.Driver/ property nameurl valuejdbc:mysql://localhost:3306/mybatis_demo/ property nameusername valueroot/ property namepassword value036520/ /dataSource /environment /environments !-- 加载映射的配置文件 -- mappers mapper resourcemapper/UserDao.xml/mapper /mappers /configuration2.1.2 创建数据库和表新建表CREATE TABLE user ( id int(11) NOT NULL auto_increment, username varchar(32) NOT NULL COMMENT 用户名称, birthday datetime default NULL COMMENT 生日, sex char(1) default NULL COMMENT 性别, address varchar(256) default NULL COMMENT 地址, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8; insert into user(id,username,birthday,sex,address) values (1,老王,2018-02-27 17:47:08,男,北京),(2,熊大,2018-03-02 15:09:37,女,上海),(3,熊二,2018-03-04 11:34:34,女,深圳),(4,光头强,2018-03-04 12:04:06,男,广州);2.1.3 修改包的显示方式。点显示选项菜单图表是设置的图标取消勾选平展软件包即可得到下图效果。2.1.4 创建包等2.1.4.1 entity包主要是与数据库表映射。对应关系实体类与数据库中的表存在一一对应关系实体类的属性对应表中的字段 。例如数据库中有一张 user 表包含 id、username、password 等字段那么在 entity 包下的 User 实体类就会有与之对应的属性如 private int id;、private String username;、private String password; 。通过 MyBatis 的映射配置可实现实体类与表之间的数据交互方便进行增删改查操作。数据持久化当执行数据库插入操作时将实体类对象的属性值对应插入到表的相应字段中查询操作则是将表中的记录数据映射填充到实体类对象的属性上 。比如执行 SELECT * FROM user WHERE id 1 语句后查询结果会被封装成 User 实体类对象返回。com.qcby.entity这个包中的每一个类都对应着数据库中的每一个表在数据库里面新建一个表就要在这个包里新建一个类。表中的所有字段列名都是这个类的成员变量但是不是所有成员变量都一定是表里面的字段。写完成员变量后生成对于的get、set方法和toString()方法。下面代码中pageSize和pageStart是后面分页查询用到的这里先不管。后面会解释。package com.lsl.entity; import java.util.Date; /** * 对应数据库中的User表 */ public class User { private Integer id; private String username; private Date birthday; private String sex; private String address; private String password; private Integer pageSize; private Integer pageStart; public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize pageSize; } public Integer getPageStart() { return pageStart; } public void setPageStart(Integer pageStart) { this.pageStart pageStart; } public User() { } public User(String username, Date birthday, String sex, String address) { this.username username; this.birthday birthday; this.sex sex; this.address address; } public String getSex() { return sex; } public void setSex(String sex) { this.sex sex; } public String getPassword() { return password; } public void setPassword(String password) { this.password password; } public String getAddress() { return address; } public void setAddress(String address) { this.address address; } public String getUsername() { return username; } public void setUsername(String username) { this.username username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday birthday; } public Integer getId() { return id; } public void setId(Integer id) { this.id id; } Override public String toString() { return User{ id id , username username \ , birthday birthday , sex sex \ , address address \ , password password \ }; } }2.1.4.2 dao包和mapper目录再新建com.qcby.dao包和mapper目录。dao层和mapper层的概念dao 层数据访问对象层Data Access Object在软件架构中dao 层主要负责与数据库进行交互执行数据的增删改查操作 。它屏蔽了具体的数据库操作细节为上层业务逻辑提供统一的数据访问接口。通过 dao 层业务层可以不用关心底层是 MySQL、Oracle 等哪种数据库以及具体的 SQL 语句如何编写和执行等细节。mapper在基于 MyBatis 框架的项目中mapper 通常是指存放 SQL 映射文件的目录。MyBatis 是一种将 SQL 语句从 Java 代码中分离出来的持久层框架mapper 目录下的 XML 文件或使用注解方式定义了具体的 SQL 语句比如 SELECT、INSERT、UPDATE、DELETE 等操作并且将这些 SQL 语句与 dao 层的接口方法进行映射关联。具体操作解释创建目录和文件在项目中创建 mapper 目录在资源目录resources下新建一个名为 mapper 的目录后续所有与 SQL 相关的 XML 文件都将存放在这个目录下 。比如要对用户表进行操作就可以在这个目录下创建一个 UserMapper.xml 文件具体操作见下面在其中编写针对用户表的 SQL 语句像查询用户列表的 SELECT * FROM user 语句等。在mapper目录下创建UserMapper.xml文件在 dao 层创建接口在 dao 包这里是 com.qcby.dao下新建一个 UserDao 接口 。这个接口定义了一系列对用户数据操作的抽象方法比如 List selectAllUsers()查询所有用户 、User selectUserById(int id)根据用户 ID 查询用户等。它并不包含具体的实现逻辑具体的实现逻辑是通过与 mapper 目录下的 XML 文件进行映射由 MyBatis 框架来动态生成实现类并执行 SQL 语句。在dao包下创建UserDao接口创建 sqlMapConfig.xml 文件在 resources 目录下创建一个SqlMapConfig名为 SqlMapConfig.xml 的文件它是 MyBatis 的全局配置文件 。在这个文件中可以配置 MyBatis 的一些全局属性如数据库连接信息数据源配置、事务管理方式、类型别名、mapper 映射文件的位置等。例如通过配置 来告诉 MyBatis 到 mapper 目录下加载 UserMapper.xml 这个映射文件。创建完后修改代码(26行修改成如下内容。19行代码的mybatis_demo是数据库名称。?xml version1.0 encodingUTF-8? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration settings !--设置mybatis输出日志-- !--logImpl表示对日志的控制-- !--STDOUT_LOGGING:将日志输出到控制台上-- setting namelogImpl valueSTDOUT_LOGGING/ /settings environments defaultmysql environment idmysql !--配置事务的类型使用本地事务策略-- transactionManager typeJDBC/transactionManager !--是否使用连接池 POOLED表示使用链接池UNPOOLED表示不使用连接池-- dataSource typePOOLED property namedriver valuecom.mysql.jdbc.Driver/ property nameurl valuejdbc:mysql://localhost:3306/mybatis_demo/ property nameusername valueroot/ property namepassword value036520/ /dataSource /environment /environments mappers mapper resourcemapper/UserMapper.xml/mapper /mappers /configuration2.1.5 在pom.xml中导入相关依赖引入MyBatis的3.4.5的版本的坐标引入MySQL驱动的jar包5.1.6版本引入Junit单元测试的jar引入log4j的jar包1.2.12版本需要引入log4j.properties的配置文件该配置文件的具体解释见框架集成 ssm 4.2添加后的代码如下。?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.lsl/groupId artifactIdMyBatisDemoTest/artifactId version1.0-SNAPSHOT/version properties maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target /properties dependencies !--mybatis核心包-- dependency groupIdorg.mybatis/groupId artifactIdmybatis/artifactId version3.4.5/version /dependency !--mysql驱动包-- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency !-- 单元测试 -- dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.10/version /dependency !-- 日志 -- dependency groupIdlog4j/groupId artifactIdlog4j/artifactId version1.2.17/version /dependency /dependencies /project随后点右上角的m标志。如果没有就点最右边的Maven然后再点红框。进度条走完就可以继续写代码了。如果此时SqlMapConfig.xml第四行代码报错。如下图。只用把这个文件删了重新再建一个即可。2.2 代码2.2.1 UserMapper.xml2.2.1.1 初始配置在UserMapper.xml中的第四行代码的namespace加上com.lsl.dao.UserDao。目的是把UserMapper.xml映射到UserDao中具体解释如下。文件命名及对应关系UserMapper.xml 这个文件命名中的 User 与 UserDao 接口以及业务中的 User 实体类相对应 。在 UserMapper.xml 文件中通过 这个叫做名称空间来指定该映射文件与 UserDao 接口关联然后在文件中定义的 SQL 语句就会与 UserDao 接口中的方法进行对应当在业务层调用 UserDao 接口的方法时MyBatis 框架会根据这种映射关系找到对应的 SQL 语句并执行。?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.lsl.dao.UserDao /mapper2.2.1.2 第一个查询语句SQL 语句定义与标签使用使用标签定义查询语句id属性需与接口方法名完全一致如findAll。resultType指定返回值类型com.lsl.entity.UserMyBatis 自动将查询结果映射为实体对象或集合。示例 SQLselect * from user查询所有用户数据返回List集合。?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.lsl.dao.UserDao !-- id:方法名称 -- !-- resultType:数据返回的类型 -- select idfindAll resultTypecom.lsl.entity.User select * from user; /select /mapper2.2.2 UserDao.java接口方法与映射文件的对应关系接口方法名需与映射文件中 SQL 标签的id一致如findAll()对应。返回值类型需与resultType匹配List对应查询多条数据User对应单条数据。接口方法默认使用public abstract修饰可省略符合 Java 接口规范。package com.lsl.dao; import com.lsl.entity.User; import org.apache.ibatis.annotations.Param; import java.util.List; public interface UserDao { public abstract ListUser findAll(); }2.2.3 UserTest.java在test下的java包中新建一个UserTest的类。测试方法Test执行流程调用接口方法如userDao.findAll()MyBatis 自动匹配映射文件中的 SQL 并执行。处理返回结果通过for-each循环遍历List打印实体对象信息。import com.lsl.dao.UserDao; import com.lsl.entity.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.Date; import java.util.List; public class UserTest { private InputStream in null; private SqlSession session null; private UserDao userDao null; Before //前置通知, 在方法执行之前执行 public void init() throws IOException { //加载主配置文件目的是为了构建SqlSessionFactory对象 in Resources.getResourceAsStream(SqlMapConfig.xml); //创建SqlSessionFactory对象 SqlSessionFactory factory new SqlSessionFactoryBuilder().build(in); //通过SqlSessionFactory工厂对象创建SqlSesssion对象 session factory.openSession(); //通过Session创建UserDao接口代理对象 userDao session.getMapper(UserDao.class); } After //After: 后置通知, 在方法执行之后执行 。 public void destory() throws IOException { //释放资源 if (session ! null) { // 增加null检查 session.close(); } in.close(); } Test public void aaa(){ ListUser users userDao.findAll(); for (User user: users ) { System.out.println(user.toString()); } }2.2.4 test方法的写法对于test方法的写法一共有三种。基于 Spring 注解的 AOP 方式第一种就是2.2.3的这种写法。核心是通过 Spring 的 Before前置通知和 After后置通知注解在测试方法执行前后自动处理资源的初始化如创建 SqlSession和释放如关闭连接简化重复的资源管理代码。接口代理方式通过 SqlSession.getMapper(接口类) 获取 DAO 接口的代理对象直接调用接口中定义的方法如 mapper.findAll()执行 SQL。这是 MyBatis 官方推荐的方式体现了面向接口编程的思想代码更简洁且类型安全。/** * 测试查询所有的方法 * throws Exception */ Test public void testFindAll() throws Exception { // 加载主配置文件目的是构建SqlSessionFactory的对象 InputStream in Resources.getResourceAsStream(SqlMapConfig.xml); // 创建SqlSessionFactory对象 SqlSessionFactory factory new SqlSessionFactoryBuilder().build(in); // 使用SqlSessionFactory工厂对象创建SqlSession对象 SqlSession session factory.openSession(); // 通过session创建UserMapper接口的代理对象 UserDao mapper session.getMapper(UserDao.class); // 调用查询所有的方法 ListUser list mapper.findAll(); // 遍历集合 for (User user : list) { System.out.println(user); } // 释放资源 session.close(); in.close(); }字符串标识方式命名空间 方法名通过 SqlSession.selectList(命名空间.方法名) 直接执行 SQL其中字符串参数由映射文件中的命名空间如 com.qcby.dao.UserDao和 SQL 标签的 id如 findAll组合而成。这种方式需要手动维护字符串标识可读性和可维护性较弱较少推荐使用。Test public void run2() throws Exception { // 加载配置文件 InputStream inputStream Resources.getResourceAsStream(SqlMapConfig.xml); // 构建SqlSessionFactory对象 SqlSessionFactory factory new SqlSessionFactoryBuilder().build(inputStream); // 获取到session对象 SqlSession session factory.openSession(); // 查询所有的数据 ListUser list session.selectList(com.qcby.dao.UserDao.findAll); // 变量集合 for (User user : list) { System.out.println(user); } // 关闭资源 session.close(); inputStream.close(); }