mybatis学习记录------1
Posted czsy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis学习记录------1相关的知识,希望对你有一定的参考价值。
一 认识mybatis
mybatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM(对象,关系映射)实现。其封装性要低于Hibernate,性能优越,并且小巧、简单易学,应用也越来越广泛。
二 搭建mybatis环境
1.下载需要的JAR包
2.部署jar文件
将上述下载的jar文件部署到项目内
三 日志配置
在java Resources下新建resource文件,命名config,此时config文件夹和src文件夹是一样的。
在config文件夹下新建log4j.properties文件
并且输入如下代码(可上jar包附带的pdf文档内查看)
# Global logging configuration
#log4j.rootLogger=ERROR, stdout
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
四 工程架构
结构:
数据库:mysql
CREATE SCHEMA `mybatis` DEFAULT CHARACTER SET utf8 ; use mybatis; CREATE TABLE `items` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL COMMENT ‘商品名称‘, `price` float(10,1) NOT NULL COMMENT ‘商品定价‘, `detail` text COMMENT ‘商品描述‘, `pic` varchar(64) DEFAULT NULL COMMENT ‘商品图片‘, `createtime` datetime NOT NULL COMMENT ‘生产日期‘, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; CREATE TABLE `orderdetail` ( `id` int(11) NOT NULL AUTO_INCREMENT, `orders_id` int(11) NOT NULL COMMENT ‘订单id‘, `items_id` int(11) NOT NULL COMMENT ‘商品id‘, `items_num` int(11) DEFAULT NULL COMMENT ‘商品购买数量‘, PRIMARY KEY (`id`), KEY `FK_orderdetail_1` (`orders_id`), KEY `FK_orderdetail_2` (`items_id`), CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT ‘下单用户id‘, `number` varchar(32) NOT NULL COMMENT ‘订单号‘, `createtime` datetime NOT NULL COMMENT ‘创建订单时间‘, `note` varchar(100) DEFAULT NULL COMMENT ‘备注‘, PRIMARY KEY (`id`), KEY `FK_orders_1` (`user_id`), CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL COMMENT ‘用户名称‘, `birthday` date DEFAULT NULL COMMENT ‘生日‘, `sex` char(1) DEFAULT NULL COMMENT ‘性别‘, `address` varchar(256) DEFAULT NULL COMMENT ‘地址‘, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; insert into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,‘台式机‘,3000.0,‘该电脑质量非常好!!!!‘,NULL,‘2015-02-03 13:22:53‘),(2,‘笔记本‘,6000.0,‘笔记本性能好,质量好!!!!!‘,NULL,‘2015-02-09 13:22:57‘),(3,‘背包‘,200.0,‘名牌背包,容量大质量好!!!!‘,NULL,‘2015-02-06 13:23:02‘); insert into `orderdetail`(`id`,`orders_id`,`items_id`,`items_num`) values (1,3,1,1),(2,3,2,3),(3,4,3,4),(4,4,2,3); insert into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,‘1000010‘,‘2015-02-04 13:22:35‘,NULL),(4,1,‘1000011‘,‘2015-02-03 13:22:41‘,NULL),(5,10,‘1000012‘,‘2015-02-12 16:13:23‘,NULL); insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,‘王五‘,NULL,‘2‘,NULL),(10,‘张三‘,‘2014-07-10‘,‘1‘,‘北京市‘),(16,‘张小明‘,NULL,‘1‘,‘河南郑州‘),(22,‘陈小明‘,NULL,‘1‘,‘河南郑州‘),(24,‘张三丰‘,NULL,‘1‘,‘河南郑州‘),(25,‘陈小明‘,NULL,‘1‘,‘河南郑州‘),(26,‘王五‘,NULL,NULL,NULL);
1.在config文件夹下新建SqlMapConfig.xml(mybatis核心配置文件)
配置mybatis的运行环境,数据源,事务等
<?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"/><!-- ${driver} --> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/><!-- ${url} --> <property name="username" value="root"/><!-- ${username} --> <property name="password" value="123456"/><!-- ${password} --> </dataSource> </environment> </environments> </configuration>
2.创建持久化类pojo
持久化类是指其实例对象需要被Mybatis持久化到数据库中的类。在应用的设计中,持久化类通常对应需求中的业务实体,mybatis中一般采用POJO编程模型来实现持久化类。
在src文件夹下新建po包
在po包下新建User.java
package pers.czs.mybatis.po; import java.util.Date; public class User { //属性名和数据库中字段对应 private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
3.映射文件
映射文件命名:
mapper代理开发映射文件名称叫做xxxMapper.xml,比如:UserMapper.xml
在config文件夹下新建folder,命名为sqlMap(存放映射文件)
在sqlMap下新建User.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 命名空间,作用是对sql进行分类化管理,理解为对sql进行隔离 --> <mapper namespace="test"> <!-- 在映射文件中配置很多sql语句 --> <!-- 通过select执行数据库查询 id:标识映射文件中的sql, 将sql语句封装到mappedStatement对象中 parameterType表示指定输入参数类型,这里指定int型 #{}表示一个占位符,和jdbc内的?一样 #{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数时简单类型,那么#{}中的参数名可以任意 resultType:指定sql输出结果所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 --> <select id="findUserById" parameterType="int" resultType="pers.czs.mybatis.po.User"> select * from user where id=#{id} </select> </mapper>
4.在SqlMapConfig文件中加载配置文件
五 程序编写
1.在src内新建first包用于测试
在包内新建MybatisFirst.java文件
package pers.czs.mybatis.first; import java.io.IOException; import java.io.InputStream; 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 pers.czs.mybatis.po.User; public class MybatisFirst { //根据id查询用户信息,得到一条记录的结果 @Test public void findUserByIdTest() throws IOException { //Mybatis配置文件 String resource = "SqlMapConfig.xml"; //得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); //创建会话工厂,传入配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //通过工厂得到SqlSession会话 SqlSession sqlSession = sqlSessionFactory.openSession(); //通过SqlSession操作数据库 //第一个参数:映射文件中的id,等于namespace+"."+id //第二个参数:指定和映射文件中所匹配的parameterType类型的参数 //sqlSession.selectOne的结果是与映射文件中所匹配的resultType类型的对象 User user = sqlSession.selectOne("test.findUserById", 1); System.out.println(user+" 这是输出结果"); //释放资源 sqlSession.close(); } }
2.JUnit运行
运行结果:
其中DEBUG[main]是运行日志
以上是关于mybatis学习记录------1的主要内容,如果未能解决你的问题,请参考以下文章
Spring+SpringMVC+MyBatis+Maven框架整合
ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段