MyBatis的使用一(框架的搭建)
本文主要讲述如何快速使用mybatis
一. MyBatis的下载
MyBatis框架下载网站:Releases · mybatis/mybatis-3 (github.com)
下载好之后,文件目录如下:
打开mybatis-3.5.10.pdf,mybatis的使用手册,进行mybatis的搭建
二. MyBatis的安装与配置
1. 创建项目
步骤一:
步骤二:选择Maven项目
步骤三:创建项目名
初始目录如下:
java包:用于编写java程序,resources包:用于存放配置文件,test包:用于测试编写好的java程序
2. 引入MyBatis框架
在pom配置文件中
添加dependency依赖
<dependencies> <!-- Mybatis核心 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency> <!-- junit测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!-- log4j日志 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> </dependencies>
3. 项目架构
一. com.hspedu包的结构如下:
1. mapper包:用于存放接口类
XXxxMapper接口类,接口类中声明对数据库中数据的处理方法
UserMapper接口类的声明如下:
public interface UserMapper { // 添加user // public void int insertUser(); // 修改user int updatePwdById(); // 删除user int deleteUser(); // 查询单行数据 User getUserSingle(); // 查询多行数据 ArrayList<User> getUserAll(); }
2. pojo包:用于存放实例
User类的声明如下:
public class User { private Integer id; private String username; private String password; private Integer age; private String gender; private String email; public User() { } public User(Integer id, String username, String password, Integer age, String gender, String email) { this.id = id; this.username = username; this.password = password; this.age = age; this.gender = gender; this.email = email; } ............
注意:实例对象,一定要有无参构造器,因为反射机制,resultSet结果集--反射-->实例对象--封装-->集合。
可以看看这篇博客:DAO数据访问对象 - zwGitOne - 博客园 (cnblogs.com)
3. utils包:用于存放工具类
SqlSessionUtils类,连接数据库,声明如下:
/** * 获得sqlSession对象,用于执行sql语句 */ public class SqlSessionUtils { private static SqlSession sqlSession; public static SqlSession getSqlSession(){ try { // 1.获取核心配置文件的输入流 InputStream resourceAsStream = Resources.getResourceAsStream("mybatis_config.xml"); // 2.获取sqlSessionFactoryBuilder执行sql语句 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 3.创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream); // 4.获取sqlSession // SqlSession sqlSession = sqlSessionFactory.openSession(true); 自动提交事务 sqlSession = sqlSessionFactory.openSession(true); } catch (IOException e) { throw new RuntimeException(e); } return sqlSession; } public static boolean closeSqlSession(){ if(sqlSession != null){ sqlSession.close(); return true; } return false; } }
mybatis-config.xml的讲解在后面,请耐心观看。
二. resource包结构如下:
1. mybatis_config.xml配置文件信息如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--配置信息的顺序--> <!--The content of element type "configuration" must match "( properties?,settings?,typeAliases?,typeHandlers?, objectFactory?,objectWrapperFactory?,reflectorFactory?, plugins?,environments?,databaseIdProvider?,mappers?)".--> <!--引入jdbc.properties数据库配置文件--> <!--使用配置信息 ${key}--> <properties resource="jdbc.properties" /> <typeAliases> <!--对指定类型设置别名--> <!--<typeAlias type="com.hspedu.pojo.User" alias="User" />--> <!--对指定类型设置默认别名,即类名,不区分大小写--> <!--<typeAlias type="com.hspedu.pojo.User" />--> <!--在pojo包中设置默认别名,即pojo的类名--> <package name="com.hspedu.pojo"/> </typeAliases> <!--environments 环境配置 default:默认环境配置 --> <environments default="development"> <!--environment 数据库连接 id:唯一标识 --> <environment id="development"> <!--transactionManager 事务管理配置 type:事务管理方式类型 jdbc 原生jdbc模式 managed 被管理模式【Spring】 --> <transactionManager type="JDBC"/> <!--dataSource 数据源配置 type:数据源类型 POOLED 使用数据连接池 UNPOOLED 不使用数据连接池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> <environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="zw20010108"/> </dataSource> </environment> </environments> <!--引入mybatis的映射文件,执行sql语句的xml文件--> <mappers> <!--以xml单个文件的方式绑定mapper.xml文件--> <!--<mapper resource="mappers/UserMapper.xml"/>--> <!--以包的方式绑定mapper.xml文件--> <!--注意:1.package的name必须与mapper接口所在的包名保持一致; 2.XXxx.xml文件的名称与mapper接口的名称保持一致--> <package name="com.hspedu.mapper"/> </mappers> </configuration>
总结:① 配置信息标签的顺序;
② 当使用properties文件,即 <properties resource="jdbc.properties" />,此时在dataSource标签中,配置数据库的信息中的value用${key}来指明;
③ 在给指定类型取别名,即 <typeAliases></typeAliases>,简化XXxxMapper.xml中查询语句的resultType的书写
方式1:<typeAlias type="com.hspedu.pojo.User" alias="User" />,type阐明实体类的位置,alias取别名
方式2:<typeAlias type="com.hspedu.pojo.User" />,默认用user或者User命名实体类
方式3:<package name="com.hspedu.pojo"/>,指明实体类所在的包,默认用类名命名实体类
④ 绑定XXxxMappper.xml文件,即<mappers></mappers>,用于提供数据库的连接,执行sql语句
方式1:<mapper resource="mappers/UserMapper.xml"/>,绑定单个xml文件【注意是在resource中找XXxxMapper.xml文件,因此用 / 】
方式2:<package name="com.hspedu.mapper"/>,绑定com/hspedu/mapper文件夹下的所有xml文件
注意方式2中package的name必须与mapper接口所在的包名一致;根据name,在resources下创建相应的文件夹时,应该用 / 作为分隔符。
2. jdbc.properties数据库信息如下:
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC jdbc.username=root jdbc.password=zw20010108
3. mappers包结构如下
UserMapper.xml文件,用于编写sql语句
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- mapper.xml要与mapper接口保持两个一致 1. mapper的namespace和mapper接口的路径保持一致 2. mapper的sql标签中的id要与mapper接口的方法保持一致 --> <mapper namespace="com.hspedu.mapper.UserMapper"> <!--int insertUser();--> <insert id="insertUser" > insert into t_user values(null,'Tom','tom123',20,'男','tom@123'); </insert> <!--int updatePwdById()--> <update id="updatePwdById" > update t_user set password = '$123' where id = 4; </update> <!--int deleteUser()--> <delete id="deleteUser" > delete from t_user where id = 8; </delete> <!--User getUserSingle()--> <!--在查询过程中,需要指明返回类型 resultType--> <select id="getUserSingle" resultType="User"> select * from t_user where id = 10; </select> <!--ArrayList<User> getUserAll()--> <select id="getUserAll" resultType="User"> select * from t_user; </select> </mapper>
注意:这里的mappers包的UserMapper.xml与mybatis-config配置文件中的<mapper resource="mappers/UserMapper.xml"/>相对应。
总结:① XXxxMapper.xml的名称要与XXxxMapper接口保持一致;
② XXxxMapper.xml中的标签 id 名称要与XXxxMapper接口中定义的方法保持一致。
③ 在使用select标签时,需要指明返回类型,
注意:在没有使用typeAliases标签的情况下,返回类型resultType = "实体类所在包名 . 实体类名称";
当使用了typeAliases标签,返回类型resultType = 别名名称。
4. resources中com.hspedu.mapper包的结构如下
注意:resources中com.hspedu.mapper包与<package name="com.hspedu.mapper"/>相对应。