MyBatis简单项目(增删改查)-MyBatis的快速入门
0.准备工作
0.1新建MySQL数据库
数据库结构如下:


数据库建表内容如下:
CREATE TABLE `ss_dept` ( `id` varchar(40) NOT NULL, `name` varchar(50) DEFAULT NULL, `parent_id` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `ss_user` ( `id` varchar(40) NOT NULL, `name` varchar(50) DEFAULT NULL COMMENT '不能重复,可为中文', `password` varchar(64) DEFAULT NULL COMMENT 'shiro MD5密码32位', `gender` varchar(1) DEFAULT NULL, `telephone` varchar(11) DEFAULT NULL, `email` varchar(60) DEFAULT NULL, `dept_id` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='后台用户表'; CREATE TABLE `st_company` ( `id` varchar(50) CHARACTER SET utf8 NOT NULL COMMENT 'ID', `name` varchar(255) DEFAULT NULL COMMENT '公司名称', `address` varchar(255) DEFAULT NULL COMMENT '公司地址', `phone` varchar(255) DEFAULT NULL COMMENT '公司电话', `industry` varchar(255) DEFAULT NULL COMMENT '所属行业', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公司表';
数据库内容插入:
INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100', '集团总部', NULL); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100101', '顺义校区', '100'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100101101', '顺义教研部', '100101'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100101102', '顺义人事部', '100101'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100102', '昌平校区', '100'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100102101', '昌平教研部', '100102'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100102102', '昌平学工部', '100102'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100102103', '昌平行政部', '100102'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100103', '总部研究院', '100'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100104', '总部总裁办公室', '100'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100105', '总部博学谷', '100'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100106', '总部人事部', '100'); INSERT INTO `ss_dept`(`id`, `name`, `parent_id`) VALUES ('100107', '总部财务部', '100'); INSERT INTO `ss_user`(`id`, `name`, `password`, `gender`, `telephone`, `email`, `dept_id`) VALUES ('002108e2-9a10-4510-9683-8d8fd1d374ef', '老王', '4QrcOUm6Wau+VuBX8g+IPg==', '男', '12345678', 'lw@export.com', '100101'); INSERT INTO `ss_user`(`id`, `name`, `password`, `gender`, `telephone`, `email`, `dept_id`) VALUES ('735730bf-3ac0-4690-882d-100178d58ff9', '花姐', '4QrcOUm6Wau+VuBX8g+IPg==', '女', '13800138013', 'huajie@export.com', '100'); INSERT INTO `ss_user`(`id`, `name`, `password`, `gender`, `telephone`, `email`, `dept_id`) VALUES ('ca592c7c-860a-464c-8f56-ea51b42a046f', '小张', '4QrcOUm6Wau+VuBX8g+IPg==', '女', '13800138021', 'xz@export.com', '100101'); INSERT INTO `ss_user`(`id`, `name`, `password`, `gender`, `telephone`, `email`, `dept_id`) VALUES ('cf0015d3-bcdd-433b-889d-808b53b72640', '马总', '4QrcOUm6Wau+VuBX8g+IPg==', '男', '13800138022', 'mz@itheima.com', '100'); INSERT INTO `ss_user`(`id`, `name`, `password`, `gender`, `telephone`, `email`, `dept_id`) VALUES ('e0de22fe-2c50-4216-ad75-ed0494d2dc92', 'admin', '4QrcOUm6Wau+VuBX8g+IPg==', '男', '13800138023', 'admin@itheima.com', '100101'); INSERT INTO `ss_user`(`id`, `name`, `password`, `gender`, `telephone`, `email`, `dept_id`) VALUES ('ef1f631d-76c8-4837-9ad9-f5f6209e4463', '小杨', '4QrcOUm6Wau+VuBX8g+IPg==', '女', '13800138025', 'xiaoyang@export.com', '100'); INSERT INTO `st_company`(`id`, `name`, `address`, `phone`, `industry`) VALUES ('1', '北京淘宝网', '北京市朝阳区来广营', '010-88888888', '电子商务'); INSERT INTO `st_company`(`id`, `name`, `address`, `phone`, `industry`) VALUES ('10', '浪潮软件', '武汉市硚口区', '027-55555555', '软件服务'); INSERT INTO `st_company`(`id`, `name`, `address`, `phone`, `industry`) VALUES ('12', '简途旅行', '武汉市青山区', '027-6666666', '旅游出行'); INSERT INTO `st_company`(`id`, `name`, `address`, `phone`, `industry`) VALUES ('13', '绿盟科技', '武汉市青山区', '027-33333333', '软件服务');
0.2新建maven工程
新建一个模块:

选择maven工程:

创建maven:

初始的maven项目如图所示:

配置pom文件:
在<project> </project>中添加依赖关系如下:
<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.32</version> </dependency> <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>
1.编写项目内容
1.1编写pojo包,以及相对应的实体类:
对应的实体类应写成标准JavaBean类:




1.2编写mybatis配置文件,和logback配置文件(logback可以让控制台输出语句高亮,不是必须配置):
新建xml配置文件:

logback.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- CONSOLE :表示当前的日志信息是可以输出到控制台的。 --> <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern> </encoder> </appender> <logger name="com.itheima" level="DEBUG" additivity="false"> <appender-ref ref="Console"/> </logger> <!-- level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF , 默认debug <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。 --> <root level="DEBUG"> <appender-ref ref="Console"/> </root> </configuration>
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> <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:///你自己的数据库名称?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="你自己的密码"/> </dataSource> </environment> </environments> <mappers> <!--加载sql映射文件--> <mapper resource="dao\CompanyMapper.xml"/> <mapper resource="dao\DeptMapper.xml"/> <mapper resource="dao\UserMapper.xml"/> </mappers> </configuration>
1.3编写sql映射文件:

例如 :ConpannyMapper.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"> <!-- namespace:名称空间 --> <mapper namespace="dao.CompanyDao"> <select id="findById" resultType="pojo.Company"> select * from st_company where id = #{id}; </select> <select id="findAll" resultType="pojo.Company"> select * from st_company; </select> </mapper>
注意:配置文件中命名空间要和Java文件中的接口文件相对应:

1.4编写dao包文件:

XxxDao接口中的方法和XxxMapper中的sql语句一一对应,值得注意的是:dao文件和mapper文件要在同一目录下。
2.编写测试文件(或者是写成主函数):

public class Entry { public static void main(String[] args) throws IOException { //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2. 获取SqlSession对象,用它来执行sql SqlSession sqlSession = sqlSessionFactory.openSession(); //3. 执行sql // List<User> users = sqlSession.selectList("pojo.mapper.UserMapper.selectAll"); //获取mapper CompanyDao companyDao = sqlSession.getMapper(CompanyDao.class); DeptDao deptDao = sqlSession.getMapper(DeptDao.class); UserDao userDao = sqlSession.getMapper(UserDao.class); List<Company> companyDaoAll = companyDao.findAll(); List<User> userDaoAll = userDao.findAll(); Dept byId = deptDao.findById("100"); System.out.println(companyDaoAll); System.out.println(userDaoAll); System.out.println(byId); //4. 释放资源 sqlSession.close(); }


浙公网安备 33010602011771号