Maven&MyBatis
目标
能够使用Maven进行项目的管理(工具)
怎么配置
idea怎么去用你电脑的maven
maven 指令了解(创建工程)
能够完成Mybatis代理方式查询数据
能够理解Mybatis核心配置文件的配置
1,Maven
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
-
提供了一套标准化的项目结构
-
提供了一套标准化的构建流程(编译,测试,打包,发布……)
-
提供了一套依赖管理机制
标准化的项目结构:
项目结构我们都知道,每一个开发工具(IDE)都有自己不同的项目结构,它们互相之间不通用。我再eclipse中创建的目录,无法在idea中进行使用,这就造成了很大的不方便,如下图:前两个是以后开发经常使用的开发工具
-
配置阿里云私服
中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。
修改 conf/settings.xml 中的 <mirrors>标签,为其添加如下子标签:
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
tips小结:
在java01项目下,cmd输入mvn clean命令====安装成功并且配置成功了!
-
maven优势:
-
提供了一套标准化的项目结构
-
提供了一套标准化的构建流程(编译,测试,打包,发布……)
-
提供了一套依赖管理机制
-
-
maven安装
-
解压
-
配置本地仓库文件夹和镜像
-
idea使用maven创建项目、导入jar
-
了解maven项目目录
-
maven仓库的概念
-
-
maven项目管理
-
maven生命周期插件:compile test package install
-
maven坐标的定义:域名反写
-
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--项目坐标--> <groupId>com.itgaohe</groupId> <!--项目在maven中的名字--> <artifactId>maven02</artifactId> <!--项目版本--> <version>1.0-SNAPSHOT</version> <!-- 项目打包方式 jar java项目(默认) war web项目 pom 聚合工程 --> <packaging>jar</packaging> <!--依赖管理--> <dependencies> <!--具体依赖--> <!--mysql文件夹 mysql-connector-java 文件夹 5.1.46 文件夹 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency> </dependencies> </project>
课前练习:
idea:创建工程要求:
创建mybaits-day1项目空间
创建mbdemo项目模块
并导入mysql依赖、druid依赖、junit依赖
2.2 Mybatis快速入门
步骤概览:
1.创建表 2.创建模块,导入坐标 3.编写和表对应的实体类 4.编写 MyBatis 核心配置文件 5.指定mapper接口和mapper文件相对应 6.编写 SQL 映射文件 7.编写测试代码
需求:查询user表中所有的数据
-
创建user表,添加数据
create database mybatis; use mybatis; drop table if exists tb_user; create table tb_user( id int primary key auto_increment, username varchar(20), password varchar(20), gender char(1), addr varchar(30) ); INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京'); INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津'); INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');
-
2.创建模块,导入坐标
在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标
<dependencies> <!--mybatis 依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <!--mysql 驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!--junit 单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <!-- 添加slf4j日志api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.20</version> </dependency> <!-- 添加logback-classic依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <!-- 添加logback-core依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> </dependencies>
tips:注意:需要在项目的 resources 目录下创建logback的配置文件(日志用,如果不用日志可以将日志jar依赖注释掉)
3.编写和表对应的实体类
编码
-
在
com.itgaohe.pojo
包下创建 User类public class User { private int id; private String username; private String password; private String gender; private String addr; //省略了 setter 和 getter tostring }
-
-
4.编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题
在模块下的 resources 目录下创建mybatis的配置文件
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"> <!--6.编写核心配置文件--> <!--configuration 配置--> <configuration> <!--environments 操作环境--> <environments default="development"> <!--environment 单个操作环境--> <environment id="development"> <!--transactionManager 事务管理类型 JDBC--> <transactionManager type="JDBC"></transactionManager> <!--dataSource 数据库连接池--> <dataSource type="POOLED"> <!--property 配置信息--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/study?characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--mappers 将映射文件加载到配置文件中--> <mappers> <mapper resource="com/itgaohe/mapper/UserMapper.xml"></mapper> </mappers> </configuration>
-
5.指定mapper接口和mapper文件相对应
要先写出 对应java资源目录下的 UserMapper 接口(com.itgaohao.mapper.UserMapper)
接口中指定要操作的接口方法
public interface UserMapper { public List<User> selectAll(); }
在resource资源目录下 创建和java文件中 相对应位置的 UserMapper.xml
添加的时候写com/itgaohe/mapper/UserMapper.xml 用/分割
6.编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题
在模块的
resources
目录下创建映射配置文件UserMapper.xml
,内容如下:<?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 namespace="com.itgaohe.mapper.UserMapper"> <select id="selectAll" resultType="com.itheima.pojo.User"> select * from user; </select> </mapper>
-
7.编写测试代码
-
在
com.itgaohe
包下编写 MybatisDemo 测试类/*7. 测试*/ public class MybatisTest { @Test public void findAll() throws IOException { //1.加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //2.获取sqlsessionfactory 加载 输入流到 工厂中 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //3.打开sqlSessionFactory 拿到单个的sqlsession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); List<Object> findAll = sqlSession.selectList("com.bdqn.mapper.UserMapper.findAll"); for (Object o : findAll) { System.out.println(o); } //关闭 释放资源 sqlSession.close(); }
-
2.21.事务的自动提交
方法 | 解释 |
---|---|
openSession() | 会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提 交该事务,更新操作数据才会持久化到数据库中 |
openSession(booleanautoCommit) | 参数为是否自动提交,如果设置为true,那么不需要手动提交事务 |
//1.事务自动提交 SqlSession sqlSession = ssf.openSession(true); //2.手动提交 sqlSession.commit();
操作事务的方法主要有:
void commit() void rollback()
解决SQL映射文件的警告提示:
在入门案例映射配置文件中存在报红的情况。问题如下:
查询语句中的数据库名 爆红
-
产生的原因:Idea和数据库没有建立连接,不识别表信息。但是大家一定要记住,它并不影响程序的执行。
-
解决方式:在Idea中配置MySQL数据库连接。
IDEA中配置MySQL数据库连接
-
点击IDEA右边框的
Database
,在展开的界面点击+
选择Data Source
,再选择MySQL
2.3 Mapper代理开发
2.3.1 Mapper代理开发概述
采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。 Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接 口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 Mapper 接口开发需要遵循以下规范:
1.Mapper.xml中的namespace(com.bdqn.mapper.UserMapper)和 mapper包中的 Mapper(UserMapper)接口 一致。 2.Mapper接口中的方法名和 select/update/insert/delete 标签中 id 的一致。 3.Mapper接口方法中的参数类型和 映射文件中 paramterType一致。 4.Mapper接口方法的返回值和 映射文件中 resultType一致。
之前我们写的代码是基本使用方式,它也存在硬编码的问题,如下:
步骤:
-
创建模块
-
导入依赖mysql\mybatis
-
mybatis-config.xml
-
UserMapper接口-----UserMapper.xml配置文件
-
测试
2.3.3 案例代码实现
-
在
com.itgaohe.mapper
包下创建 UserMapper接口,代码如下:public interface UserMapper { List<User> selectAll(); User selectById(int id); }
-
在
resources
下创建com/itgaohe/mapper
目录,并在该目录下创建 UserMapper.xml 映射配置文件<!-- namespace:名称空间。必须是对应接口的全限定名 --> <mapper namespace="com.itheima.mapper.UserMapper"> <select id="selectAll" resultType="com.itheima.pojo.User"> select * from tb_user; </select> </mapper>
-
在
com.itgaohe
包下创建 MybatisDemo2 测试类,代码如下:/** * Mybatis 代理开发 */ public class MyBatisDemo2 { public static void main(String[] args) throws IOException { //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2. 获取SqlSession对象,用它来执行sql SqlSession sqlSession = sqlSessionFactory.openSession(); //3. 执行sql //3.1 获取UserMapper接口的代理对象==== //UserMapper userMapper = new UserMapperImpl(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> users = userMapper.selectAll(); System.out.println(users); //4. 释放资源 sqlSession.close(); } }
注意:
如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。也就是将核心配置文件的加载映射配置文件的配置修改为
<mappers> <!--加载sql映射文件--> <!-- <mapper resource="com/itgaohe/mapper/UserMapper.xml"/>--> <!--Mapper代理方式--> <package name="com.itgaohe.mapper"/> </mappers>
实现规则 :
接下来我们先对里面的一些配置进行讲解。
2.4.1 多环境配置
在核心配置文件的
environments
标签中其实是可以配置多个environment
,使用id
给每段环境起名,在environments
中使用default='环境id'
来指定使用哪儿段配置。我们一般就配置一个environment
即可。<environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--数据库连接信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> <environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--数据库连接信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments>
2.4.2 类型别名
在映射配置文件中的
resultType
属性需要配置数据封装的类型(类的全限定名)。而每次这样写是特别麻烦的,Mybatis 提供了类型别名
(typeAliases) 可以简化这部分的书写。首先需要现在核心配置文件中配置类型别名,也就意味着给pojo包下所有的类起了别名(别名就是类名),不区分大小写。内容如下:
<typeAliases> <!--name属性的值是实体类所在包--> <package name="com.itgaohe.pojo"/> </typeAliases>
通过上述的配置,我们就可以简化映射配置文件中
resultType
属性值的编写<mapper namespace="com.itheima.mapper.UserMapper"> <select id="selectAll" resultType="user"> select * from tb_user; </select> </mapper>
添加模板内容为:
<?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 namespace=""> </mapper>
模板内容为
<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/xxx.xml"></mapper> </mappers> </configuration>
小结:
-
用maven搭建环境(多用,孰能生巧)
-
mybatis(重点在步骤)
-
核心配置文件
-
映射配置文件
-
pojo
-
测试类
-
<!-- 1.创建模块 2.导入依赖 3,核心配置文件 4,写pojo 5,映射接口 6,映射配置文件 7.测试功能 -->
能力目标:
熟练使用mybatis映射方式。
-
使用mybatis完成tb_brand表查询全部;tb_brand(id,brand_name,company_name,ordered,description,status)
-
使用mybatis完成person表查询全部;
-
使用mybatis完成card表查询全部;
-
使用mybatis完成classes表查询全部;
-
使用mybatis完成student表查询全部;course
-