MyBatis+Maven极简项目测试
一、环境配置
1. IDEA下载

可以根据系统选择下载的版本,然后进行安装。
2. Maven下载

可以根据需要选择下载的版本,下载好之后解压到某个位置即可。
3. MySQL下载

可以根据系统选择下载的版本,然后进行安装,用户名和密码要记住。
4. 设置
Win10系统环境变量设置
-
右击 :此电脑 —>属性—>高级系统设置—>环境变量
![环境变量配置]()
-
在 系统变量 中选择 新建,在弹出的界面中填入变量名和变量值,点击 确定 。
变量名:一般为 Maven_Home ,也可以自行设计。
变量值:点击 浏览目录 选择 Maven 文件夹下的 bin 目录即可,也可以手敲。

- 选择 :用户变量中的path ,点击 编辑 —>新建—>填入”%Maven_Home%“—>确定
![path配置]()
测试并设置Maven
-
快捷键 Win+R —>填入 cmd —>回车写入mvn -v
![在这里插入图片描述]()
弹出Maven版本号等相关信息表明配置成功。 -
在Maven根目录下新建文件夹 repository:依赖仓库,项目的依赖都会自动下载存放到该文件夹中。
也可以设置其他路径,一般都会设置在Maven根目录下。
![在这里插入图片描述]()
-
编辑conf—>settings.xml文件:配置依赖获取源,仓库,jdk版本等信息。注释部分是官方解释和模板格式,可根据实际情况进行修改!
在<localRepository>标签下填入repository文件夹地址,设置依赖仓库
<localRepository>D:\Maven\repository</localRepository>在<mirrors>下新建标签<mirror>设置依赖下载镜像,可加速jar包下载速度!
<mirrors> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror> <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors>在<profiles>下新建<profile>标签,设置jdk版本等信息
<profiles> <profile> <id>JDK-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles>
IDEA中的Maven设置
选择File—>Settings—>Build,Execution,Deployment—>Build Tools—>Maven

Maven home directory:本地Maven文件目录
User setting file:本地Maven的settings.xml文件
Local repository:本地依赖库
二、简单项目搭建测试
-
MySQL语句运行,创建本次项目数据库端需要。
/* SQLyog Ultimate v9.60 MySQL - 5.1.73-community : Database - memmana ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`memmana` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `memmana`; /*Table structure for table `admin` */ DROP TABLE IF EXISTS `admin`; CREATE TABLE `admin` ( `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_estonian_ci NOT NULL, `password` char(32) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `admin` */ insert into `admin`(`username`,`password`) values ('admin','21232f297a57a5a743894a0e4a801fc3'); /*Table structure for table `news` */ DROP TABLE IF EXISTS `news`; CREATE TABLE `news` ( `id` int(11) NOT NULL AUTO_INCREMENT, `contentTitle` varchar(40) NOT NULL, `contentPage` varchar(80) NOT NULL, `publishDate` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; /*Data for the table `news` */ insert into `news`(`id`,`contentTitle`,`contentPage`,`publishDate`) values (1,'1:Web开发基础及Java EE开发环境搭建','http://www.wustwzx.com/javaee/sy/wkd2018/sy1.html','2015-10-24'),(2,'2:使用JSP技术开发Web项目','http://www.wustwzx.com/javaee/sy/wkd2018/sy2.html','2015-10-15'),(3,'3:Servlet组件、使用MVC模式开发Web项目','http://www.wustwzx.com/javaee/sy/wkd2018/sy3.html','2015-10-15'),(4,'4:MyBatis框架','http://www.wustwzx.com/javaee/sy/wkd2018/sy4.html','2015-10-15'),(5,'5:Spring MVC框架','http://www.wustwzx.com/javaee/sy/wkd2018/sy5.html','2015-10-15'),(6,'6:Spring框架','http://www.wustwzx.com/javaee/sy/wkd2018/sy6.html','2015-10-15'),(7,'7:使用SSM整合开发Web项目','http://www.wustwzx.com/javaee/sy/wkd2018/sy7.html','2015-12-01'),(8,'8:Spring Boot框架','http://www.wustwzx.com/javaee/sy/wkd2018/sy8.html','2015-12-01'); /*Table structure for table `user` */ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `username` char(20) NOT NULL, `password` varchar(20) NOT NULL, `realname` char(10) DEFAULT NULL, `mobile` char(11) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `user` */ insert into `user`(`username`,`password`,`realname`,`mobile`,`age`) values ('chenjiu','777','陈久','13700000009',99),('lisi','222','李四','13700000004',44),('qianqi','555','钱七','13700000007',77),('sunba','666','孙八','13700000008',88),('wangwu','333','王五','13700000005',55),('zhangsan','111','张三','13700000003',33),('zhaoliu','444','赵六','13700000006',66); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -
选择File—>New—>Project,选中Maven—>Next
![在这里插入图片描述]()
选中:create from archetype 后可以根据实际选择使用各种项目的目录框架。 -
填入项目名和项目位置
![在这里插入图片描述]()
-
目录结构分析
![在这里插入图片描述]()
main—>java:各种层次的Java源代码,本次实验将使用到dao(数据操作层)、 model(实体层)、untils(工具类)。
resources:数据配置源,存放配置文件和映射文件等。
test—>java:测试类。
pom.xml:Maven的依赖配置。
-
创建包和文件夹
-
创建类和数据源(示例操作User表)
![在这里插入图片描述]()
-
pom.xml编写
添加<dependencies>便签并创建 <dependency>依赖标签
<?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>cn.lx</groupId> <artifactId>MyBatisMavenTest</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project><dependencies>依赖集
- <dependency>依赖,jar包的官网一般会提供写法
- <groupId>组名
- <artifactId>jar包名
- <version>版本号
如果jar包没有自动导入,可以点击maven的刷新!
![在这里插入图片描述]()
-
jdbc.properties编写
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/memmana?serverTimezone=UTC n=root p=rootdriver:驱动名称
url:数据库链接,?后是连接参数,不同机器可能需要加不同的参数
n:用户名
p:密码
-
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> <properties resource="jdbc.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${n}"/> <property name="password" value="${p}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UserMapper.xml"/> <!--如果在mapper映射文件中namespace引入映射接口,那么就会与Class的注入映射语句冲突--> <mapper resource="mapper/UserMapper2.xml"/> <!--<mapper class="cn.lx.mapper.UserMapper"/>--> </mappers> </configuration><properties resource="jdbc.properties"/>引入外部properties文件
<environments default="development"> 环境配置
- <environment id="development">
- <transactionManager type="JDBC"/>事务管理方式为JDBC类型
- <dataSource type="POOLED">获取jdbc.properties文件中的数据库链接参数
<mapper resource="mapper/UserMapper.xml"/>注册sql操作xml文件
<mapper class="cn.lx.mapper.UserMapper"/>注册sql操作类文件 -
UserMapper.xml和UserMapper2.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="cn.lx.mybatis"> <select id="findAll" resultType="cn.lx.model.User"> select * from 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"> <!--实际就是将接口定义的方法相关的SQL引入到XML中实现--> <mapper namespace="cn.lx.mapper.UserMapper"> <select id="findUserByAge" resultType="cn.lx.model.User"> select * from user where age in( <foreach collection="list" item="age" separator=","> #{age} </foreach> ) </select> </mapper><mapper namespace="cn.lx.mybatis">映射标签,namespace为其包括的所有sql语句提供一个统一组名。如果namespace引入的是某个映射接口,其作用相当于注入类映射到Mybatis框架中,需要注意的是SQL语句的id必须和接口对应的方法名相同!
<select id="findAll" resultType="cn.lx.model.User">查询标签,id是其标识号,resultType表明结果类型。
调用该方法用cn.lx.mybatis.findAll即可 -
UserMapper编写
package cn.lx.mapper; import cn.lx.model.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserMapper { @Select("select * from user order by age") public List<User> findAll(); List<User> findUserByAge(List<Integer> list); }@Select、@Update、@Delete、@Insert等注解原理和通过xml文件相差不多。只不过这种方式看起来的比较简洁,简单项目推荐注解,复杂的还是XML映射比较好。
增删改等操作需要commit()方法进行事务提交 -
MyBatisUntils.java编写
package cn.lx.untils; 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 java.io.IOException; import java.io.InputStream; public class MyBatisUntils { //MyBatis核心SqlSessionFactory,每个应用都有一个SqlSessionFactory,用于获取映射文件的反射对象SqlSession private static SqlSessionFactory sqlSessionFactory = null; /*静态获取SqlSessionFactory对象 * Resources.getResourceAsStream("映射文件名") 得到InputStream对象 * new SqlSessionFactoryBuilder().build(InputStream对象) 得到SqlSessionFactory * 记得关流 * */ static { InputStream inputStream = null; try { String resource = "mybatis-config.xml"; inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } //获得SqlSession对象,使用SqlSessionFactory对象.openSession() public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } //关闭SqlSession对象,使用SqlSession对象.close() public static void closeSqlSession(SqlSession session) { if (null != session) session.close(); } } -
User.java编写
package cn.lx.model; public class User { //字段属性,根据表的列名设计 private String username; //类属性 private String password; private String realname; private String mobile; private int age; //Getter和Setter方法 public void setUsername(String username) { //setXXX方法 this.username = username; } public String getUsername() { //getXXX方法 return username; } public void setPassword(String password) { this.password = password; } public String getPassword() { return password; } public void setRealname(String realname) { this.realname = realname; } public String getRealname() { return realname; } public void setMobile(String mobile) { this.mobile = mobile; } public String getMobile() { return mobile; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } //有参构造函数重载形式 public User(String username, String password) { this.username = username; this.password = password; } public User(String username) { this.username = username; } public User(String username, String password, String realname, String mobile, int age) { this.username = username; this.password = password; this.realname = realname; this.mobile = mobile; this.age = age; } //无参构造函数,不可省略 public User() { } //重写toString(),自定义输出对象本身时的格式 @Override public String toString() { return "User [username=" + username + ", password=" + password + ", realname=" + realname + ", mobile=" + mobile + ", age=" + age + "]"; } } -
UserDao.java编写
package cn.lx.dao; import cn.lx.model.User; import java.util.List; public interface UserDao { //定义数据操作 public List<User> findAll(); } -
UserDaoImpl.java编写
package cn.lx.dao.impl; import cn.lx.dao.UserDao; import cn.lx.model.User; import cn.lx.untils.MyBatisUntils; import org.apache.ibatis.session.SqlSession; import java.util.List; public class UserDaoImpl implements UserDao { //获取SqlSession对象 private SqlSession sqlSession = MyBatisUntils.getSqlSession(); //实现findAll方法 @Override public List<User> findAll() { //调用UserMapper映射文件的方法 return sqlSession.selectList("cn.lx.mybatis.findAll"); } //关闭SqlSession对象 public String close() { sqlSession.close(); if (sqlSession == null) { return "close succeed"; } else { return "close fail"; } } } -
UserTest.java编写
import cn.lx.dao.impl.UserDaoImpl; import cn.lx.mapper.UserMapper; import cn.lx.untils.MyBatisUntils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class UserTest { //获取UserDao接口的实现类 UserDaoImpl userDaoImpl = new UserDaoImpl(); SqlSession sqlSession=MyBatisUntils.getSqlSession(); //@Test测试注解,可以直接执行该方法,不用再main函数中 @Test public void testFindAll() { //调用findAll方法并输出 userDaoImpl.findAll().forEach(System.out::println); //关闭SqlSession对象 userDaoImpl.close(); } @Test public void testFindAllInterfaceMapper(){ //接口方式映射Sql语句 sqlSession.getMapper(UserMapper.class).findAll().forEach(System.out::println); } @Test public void testFindUserByAgeInterfaceMapperXml(){ //Xml引入映射接口,完成两种方法融合 List<Integer> list = new ArrayList<>(); list.add(33);list.add(66);list.add(99); sqlSession.getMapper(UserMapper.class).findUserByAge(list).forEach(System.out::println); } }输出结果
![在这里插入图片描述]()
- 总结
- 首先配置Maven和MyBatis的xml文件
- 然后编写Sql映射文件
- 工具类可以不用,但每次都要执行同样语句会很麻烦
- 根据表创建实体类和操作接口以及其实现
- 最后进行测试
- Author
- 小葳宝贝最爱吃饭











浙公网安备 33010602011771号