Mybatis学习
来源:互联网 发布:ubuntu17.04安装mysql 编辑:程序博客网 时间:2024/06/07 07:14
学习了Mybatis,觉得这个东西是真的方便,站在巨人的肩上都能感受到无穷的能量呀。
MyBatis官方中文网站
完整项目:http://oz1w76hwf.bkt.clouddn.com/java/mybatisMyBatis.7z
搭建项目
使用Maven搭建好项目
项目结构图
环境准备
安装mybatis
在pom.xml中加入maven依赖
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version></dependency>
同时增加java连接数据库依赖
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version></dependency>
后面需要到的日志log4j依赖
<!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version></dependency>
数据库表结构和数据
-- ------------------------------ Table structure for classes-- ----------------------------DROP TABLE IF EXISTS `classes`;CREATE TABLE `classes` ( `cid` int primary key auto_increment, `cname` varchar(10)) -- ------------------------------ Records of classes-- ----------------------------INSERT INTO `classes` VALUES (1, '软件工程一班');INSERT INTO `classes` VALUES (2, '软件工程二班');INSERT INTO `classes` VALUES (3, '软件工程三班');-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `sid` int primary key auto_increment, `sname` varchar(10), `spwd` varchar(50), `cid` int) --增加外键约束alter table student add constraint sc foreign key(cid) references classes(cid) -- ------------------------------ Records of student-- ----------------------------INSERT INTO `student` VALUES (1, '文章', 'a', 1);INSERT INTO `student` VALUES (2, '沪旦铭', 'a', 1);INSERT INTO `student` VALUES (3, '马伊琍', 'a', 1);INSERT INTO `student` VALUES (7, '佟大为', 'a', 2);INSERT INTO `student` VALUES (8, '谢娜', 'a', 2);INSERT INTO `student` VALUES (9, '王力宏', 'a', 3);
JavaBean
Student类
import java.io.Serializable;public class Student implements Serializable{ private static final long serialVersionUID = 3626150075724553325L; private Integer sid; private String sname; private String spwd; private Integer cid; //班级编号 //省略get set方法}
Classes类
import java.io.Serializable;import java.util.List;public class Classes implements Serializable{ private static final long serialVersionUID = 5527884450588186839L; private Integer cid; private String cname; private List<Student> student; //省略get set方法}
配置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"><configuration> <!-- 配置执行顺序 --> <!-- properties 属性 settings 设置 typeAliases 类型别名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSource 数据源 databaseIdProvider 数据库厂商标识 mappers 映射器 --> <properties resource="config.properties"> <!-- 注意: 如果加上一下两句表示数据库的连接名称为root 密码为a 这个可以不填写则mybatis会去config.properties读取 <property name="username" value="root"/> <property name="password" value="a"/> --> </properties> <!-- 配置了properties则数据源连接可以用 ${username} 格式动态加载数据 --> <settings> <!-- 设置缓存等相关 --> <setting name="cacheEnabled" value="true"/> <!-- 设置日志 --> <setting name="logImpl" value="LOG4J"/> </settings> <!-- 类的别名 同时也支持包扫描 --> <typeAliases> <!-- 一个一个类指明 <typeAlias alias="Author" type="domain.blog.Author"/> --> <!-- 使用包扫描 --> <package name="com.wy.bean"/> </typeAliases> <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="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 配置映射文件 有三种方式 xml.文件,类,file: --> <mappers> <mapper resource="com/wy/bean/StudentMapper.xml"/> <mapper resource="com/wy/bean/ClassesMapper.xml"/> </mappers></configuration>
config.properties
数据库配置文件
#dateSource propertie url =jdbc:mysql://localhost:3306/mybatisdriver =com.mysql.jdbc.Driverusername =rootpassword =
log4j.properties
日志配置
# Global logging configurationlog4j.rootLogger=ERROR, stdout# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n# MyBatis logging configuration...log4j.logger.com.wy.bean.StudentMapper=TRACElog4j.logger.com.wy.bean.ClassesMapper=TRACE
Mapper XML 映射文件
StudentMapper.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.wy.bean.StudentMapper"> <!-- 根据名字查找学生 --> <!-- 注意:在mybatis-config.xml没有配置类别名的时候需要写上类的全路径 com.wy.bean.Student--> <select id="selectStudentBySname" resultType="Student" parameterType="Student"> select * from student where sname = #{sname} </select> <!-- 查找所有学生 返回的是一个list集合 --> <select id="selectAllStudent" resultType="Student"> select * from student </select></mapper>
ClassesMapper.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.wy.bean.ClassesMapper"> <!-- 开启缓存 --> <cache/> <!-- 查找所有班级 --> <select id="selectAllClasses" resultType="Classes"> select * from classes </select> <resultMap id="studentResultMap" type="Classes"> <id property="cid" column="cid" /> <result property="cname" column="cname"/> <!-- 如果是一对多关系则用collection 一个班级对应对个学生--> <collection property="student" ofType="Student"> <id property="sid" column="sid"/> <result property="sname" column="sname"/> </collection> </resultMap> <!-- 根据班级名查找所有学生 --> <!-- 因为查到的结果集并不是只有班级,还有多个学生,因此需要在classes类中写上学生 --> <select id="selectStudentByClassesCName" parameterType="Classes" resultMap="studentResultMap"> select classes.cid as cid,cname,sid,sname from student left join classes on student.cid = classes.cid where cname = #{cname} </select> <!-- <association property="student" javaType="Student"> <id property="sid" column="sid"/> <result property="sname" column="sname"/> </association> --></mapper>
使用Junit测试
package com.wy.test;import java.io.IOException;import java.io.InputStream;import java.util.List;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.Test;import com.wy.bean.Classes;import com.wy.bean.Student;/** * 测试sqlsession是否创建成果 * @author 沪旦铭 * */public class MyTest { static SqlSession sqlSession ; static { String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //建立Sqlsession sqlSession = sqlSessionFactory.openSession(); } @Test public void selectStudentBySname() throws IOException { //通过sqlSession去执行sqlQurey //参数说明: xml配置文件.执行的id Student s = new Student(); s.setSname("沪旦铭"); Student stu = sqlSession.selectOne("com.wy.bean.StudentMapper.selectStudentBySname",s); System.out.println( stu.getSname() ); /* DEBUG [main] - ==> Preparing: select * from student where sname = ? DEBUG [main] - ==> Parameters: 沪旦铭(String) TRACE [main] - <== Columns: sid, sname, spwd, cid TRACE [main] - <== Row: 2, 沪旦铭, a, 1 DEBUG [main] - <== Total: 1 沪旦铭 */ } //查找所有学生信息 @Test public void selectAllStudent() { List<Student> list = sqlSession.selectList("com.wy.bean.StudentMapper.selectAllStudent"); for(Student stu:list) { System.out.println( stu.getSname() ); } /* DEBUG [main] - ==> Preparing: select * from student DEBUG [main] - ==> Parameters: TRACE [main] - <== Columns: sid, sname, spwd, cid TRACE [main] - <== Row: 1, 文章, a, 1 TRACE [main] - <== Row: 2, 沪旦铭, a, 1 TRACE [main] - <== Row: 3, 马伊琍, a, 1 TRACE [main] - <== Row: 7, 佟大为, a, 2 TRACE [main] - <== Row: 8, 谢娜, a, 2 TRACE [main] - <== Row: 9, 王力宏, a, 3 DEBUG [main] - <== Total: 6 文章 沪旦铭 马伊琍 佟大为 谢娜 王力宏 */ } //查询所有的班级 @Test public void selectAllClasses() { List<Classes> list = sqlSession.selectList("com.wy.bean.ClassesMapper.selectAllClasses"); for(Classes c:list) { System.out.println( c.getCname() ); } /* DEBUG [main] - Cache Hit Ratio [com.wy.bean.ClassesMapper]: 0.0 DEBUG [main] - ==> Preparing: select * from classes DEBUG [main] - ==> Parameters: TRACE [main] - <== Columns: cid, cname TRACE [main] - <== Row: 1, 软件工程一班 TRACE [main] - <== Row: 2, 软件工程二班 TRACE [main] - <== Row: 3, 软件工程三班 DEBUG [main] - <== Total: 3 软件工程一班 软件工程二班 软件工程三班 */ } //根据班级名查找所有的学生 @Test public void selectStudentByClassesCName() { Classes c = new Classes(); c.setCname("软件工程一班"); Classes cla = sqlSession.selectOne("com.wy.bean.ClassesMapper.selectStudentByClassesCName",c); System.out.println( cla.getCname() ); List<Student> stus = cla.getStudent(); for(Student s:stus) { System.out.println( s.getSid()+"\t"+s.getSname() ); } /* DEBUG [main] - Cache Hit Ratio [com.wy.bean.ClassesMapper]: 0.0 DEBUG [main] - ==> Preparing: select classes.cid as cid,cname,sid,sname from student left join classes on student.cid = classes.cid where cname = ? DEBUG [main] - ==> Parameters: 软件工程一班(String) TRACE [main] - <== Columns: cid, cname, sid, sname TRACE [main] - <== Row: 1, 软件工程一班, 1, 文章 TRACE [main] - <== Row: 1, 软件工程一班, 2, 沪旦铭 TRACE [main] - <== Row: 1, 软件工程一班, 3, 马伊琍 DEBUG [main] - <== Total: 3 软件工程一班 1 文章 2 沪旦铭 3 马伊琍 */ }}
更详细的学习参考官方文档即可!
MyBatis官方中文网站
阅读全文
0 0
- Mybatis学习---了解Mybatis
- 【Mybatis学习】Mybatis缓存
- MyBatis学习
- MyBatis学习
- MyBatis学习
- Mybatis学习
- mybatis学习
- Mybatis学习
- mybatis学习
- MyBatis 学习
- MyBatis学习
- MyBatis学习
- MyBatis学习
- MyBatis学习
- mybatis学习
- mybatis 学习
- mybatis学习
- MyBatis学习
- Android友盟集成QQ登陆详解大全
- Python网络编程
- 优秀的手写识别数据集
- Python.random.seed()用法
- Two heaps -codeforce 353B --mystical_curve
- Mybatis学习
- bilibili 根据up主下载其下的投稿
- MOOC清华《VC++面向对象与可视化程序设计》第4章:鼠标操作例程(灰白选框)
- 含有多个按钮的自定义控件
- 数组名和数组名地址。
- HDU1019
- window下部署go环境
- 重新爬了一个网站,被限制了ip
- IT路上的伦理与道德问题