xl_echo编辑整理

百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!


MyBatis架构图

轻量级半自动框架-MyBatis入门案例_半自动

MyBatis入门程序

mybatis下载

mybaits的代码由github.com管理,地址:​​https://github.com/mybatis/mybatis-3/releases​​​​

入门程序功能主要包含一下几块:


  • 根据用户id查询一个用户信息
  • 根据用户名称模糊查询用户信息列表
  • 添加用户
  • 更新用户
  • 删除用户

工程搭建

第一步:创建一个java工程,jdk使用1.7

第二步:在数据库中创建对应的数据库和数据表,这里提供响应的建表语句

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `orders`
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
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;
-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES ('3', '1', '1000010', '2015-02-04 13:22:35', null);
INSERT INTO `orders` VALUES ('4', '1', '1000011', '2015-02-03 13:22:41', null);
INSERT INTO `orders` VALUES ('5', '10', '1000012', '2015-02-12 16:13:23', null);
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
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;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '王五', null, '2', null);
INSERT INTO `user` VALUES ('10', '张三', '2014-07-10', '1', '北京市');
INSERT INTO `user` VALUES ('16', '张小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('22', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('24', '张三丰', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('25', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('26', '王五', null, null, null);

第三步:在工程中创建lib文件夹,在该文件中导入相关的jar包,并Build Path

轻量级半自动框架-MyBatis入门案例_开源_02

第四步:创建日志文件,以便观察运行

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# 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

第五步:这里是重点,创建核心配置文件

现在工程中创建一个config文件夹,专门用来存放配置文件,日志文件也放在这个文件夹中。里面主要用来放数据源和事务管理。

<?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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="password" />
</dataSource>
</environment>
</environments>

<!-- 加载mapper文件 -->
<mappers>
<!-- resource是基于classpath加载的 -->
<mapper resource="sqlmap/user.xml"/>
</mappers>

</configuration>

第六步:根据数据库创建对应的pojo类

注意:字段名一定要与数据库的字段名对应上

package com.echo.mybatis.pojo;

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;
}

}

第七步:根据pojo类来配置映射文件

<?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语句的隔离
#{} 代表的是占位符,相当于jdbc的“?”
parameterType 代表参数,是占位符需要的参数,值代表占位符需要的类型
resultType 代表返回值类型
-->
<mapper namespace="test">
<!-- 根据ID查询用户 -->
<select id="getUserById" parameterType="int" resultType="com.echo.mybatis.pojo.User">
select * from user where id = #{id}
</select>

<!--
根据模糊查询用户
${}代表字符串拼接指令
-->
<select id="getUserByName" parameterType="string" resultType="com.echo.mybatis.pojo.User">
select * from user where username like '%${value}%'
</select>

<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.echo.mybatis.pojo.User">
<!--
keyProperty : 对于pojo的主键属性
resultType : 对应主键的数据类型
order:after : 代表在执行插入之后执行这条语句
-->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()<!-- 返回最后生成的id -->
</selectKey>
insert into user (username, birthday, sex, address) values(#{username}, #{birthday}, #{sex}, #{address})
</insert>

<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>

<!-- 修改用户 -->
<update id="updateUser" parameterType="com.echo.mybatis.pojo.User">
update user set username=#{username} where id=#{id}
</update>

</mapper>

第八步:编写测试类

package com.echo.mybatis.mybatistest;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
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.echo.mybatis.pojo.User;

/**
* 测试MyBatis
*
* @author Administrator
*
*/
public class MybatisTest {

private SqlSessionFactory sqlSessionFactory;

private void init() throws IOException {
// 第一步:创建一个SQLSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 第二步:加载配置文件
String src = "sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(src);
// 第三步:创建SQLSessionFactory对象
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}

/**
* 根据ID查询用户
*
* @throws IOException
*/
@Test
public void getUserById() throws IOException {

init();

// 第四步:创建SQLSession对象
SqlSession openSession = sqlSessionFactory.openSession();
// 第五步:使用SqlSession对象执行查询,得到User对象
// 第一个参数,是刚才在User.xml中配置的select的Id
User user = openSession.selectOne("getUserById", 10);
// 第六步:打印结果
System.out.println(user);
// 第七步:关闭资源
openSession.close();
}

/**
* 根据字符串模糊查询用户
*
* @throws IOException
*/
@Test
public void getUserByName() throws IOException {

init();

// 第四步:创建SQLSession对象
SqlSession openSession = sqlSessionFactory.openSession();
// 第五步:使用SqlSession对象执行查询,得到User对象
// 第一个参数,是刚才在User.xml中配置的select的Id
List<User> users = openSession.selectList("getUserByName", "张");
// 第六步:打印结果
for (User user : users) {
System.out.println(user);
}
// 第七步:关闭资源
openSession.close();
}

/**
* 插入一条记录,并返回主键
*
* @throws IOException
*/
@Test
public void addUser() throws IOException {

init();

// 创建一个SQLSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();

User user = new User();
user.setUsername("小乔");
user.setBirthday(new Date());
user.setSex("2");
user.setAddress("长沙");
sqlSession.insert("insertUser", user);
System.out.println(user);
sqlSession.commit();
sqlSession.close();
}

/**
* 删除用户
* @throws IOException
*/
@Test
public void deleteUser() throws IOException {

init();

// 创建一个SQLSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();

sqlSession.delete("deleteUser",32);

sqlSession.commit();
sqlSession.close();
}

/**
* 修改用户
* @throws IOException
*/
@Test
public void updateUser() throws IOException{
init();

// 创建一个SQLSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();

User user = new User();
user.setUsername("张飞");
user.setId(30);

sqlSession.update("updateUser", user);
sqlSession.commit();
sqlSession.close();
}
}