1、准备数据库,执行mysql语句。
-- ----------------------------
-- 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_order_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=35 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);
2、创建工程
3、配置pom.xml文件,加入数据库依赖驱动
4.0.0
com.liwei
mybatis01
0.0.1-SNAPSHOT
UTF-8
5.1.30
4.12
mysql
mysql-connector-java
${mysql.version}
junit
junit
${junit.version}
test
4、编写代码
package com.liwei.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* @ClassName: JdbcTest
* @Description:jdbc问题总结
* @author: Li_Wei
* @date: 2018年6月27日 上午10:13:52
*/
public class JdbcTest {
public static void main(String[] args) {
Connection con = null;
PreparedStatement psmt = null;
ResultSet set = null;
try {
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.创建数据库的连接对象
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/liwei", "root", "root");
// 3.定义sql语句
String sql = "select * from user where id = ?";
// 4.创建statement对象
psmt = con.prepareStatement(sql);
// 5.设置参数
psmt.setInt(1, 1);
// 6.执行
set = psmt.executeQuery();
// 7.处理结果集
while (set.next()) {
System.out.println("用户Id:" + set.getInt("id") + ",用户名称:" + set.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//8.释放资源
if (set != null)set.close();
if (psmt != null)psmt.close();
if (con != null)con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
5、测试结果
6、总结jdbc开发出现的问题
mybatis是Apache软件基金会下的一个开源项目,前身是Ibatis框架。2010年这个项目由apache 软件基金会迁移到google code下,改名为mybatis。2013年11月又迁移到了github(https://github.com/mybatis/mybatis-3/releases)。
mybatis是一个持久层的框架,是对JDBC操作数据库的封装,使开发者只需要关注业务本身,不需要花费精力去处理加载驱动、创建数据库连接对象、创建statement语句对象、参数设置、结果集处理等一系列繁杂的过程代码。
mybatis通过xml或注解进行配置,将java对象与sql语句中的参数自动映射生成最终执行的sql语句,并将sql语句执行结果自动映射成java对象,返回给业务层(service)应用。
需求:实现用户表(user)增、删、改、查操作。
1、配置pom.xml文件
4.0.0
com.liwei
mybatis01
0.0.1-SNAPSHOT
UTF-8
5.1.30
4.12
3.4.5
1.7.7
1.2.17
mysql
mysql-connector-java
${mysql.version}
org.mybatis
mybatis
${mybatis.version}
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
junit
junit
${junit.version}
test
2、sqlMapConfig.xml配置文件,是mybatis框架的核心配置文件。
3、log4j.properties日志文件
# 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
4、实体类User.java文件
package com.liwei.mybatis.domain;
import java.util.Date;
public class User {
private Integer id; // 主键id
private String username; // 用户名称
private Date birthday; // 生日
private String sex; // 性别
private String address; // 地址
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="
+ address + "]";
}
}
5、UserMapper.xml文件
insert into user (id,username,birthday,sex,address)
values (#{id},#{username},#{birthday},#{sex},#{address})
delete from user where id = #{id}
update user set username=#{username},sex=#{sex} where id=#{id}
6、MyBatisTest测试类
package com.liwei.mybatis.test;
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.liwei.mybatis.domain.User;
public class MyBatisTest {
/**
* @Title: getSqlSessionFactory
* @Description: 将增、删、改、查公共使用的部分提出来
* @param: @return
* @param: @throws
* IOException
* @return: SqlSession
* @throws @author
* Li_Wei
*/
public SqlSessionFactory getSqlSessionFactory() throws IOException {
// 1.加载核心配置文件
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2.读取配置文件的内容
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = builder.build(inputStream);
return sqlSessionFactory;
}
/**
* @Title: addUser
* @Description: 新增用户
* @param:
* @return: void
* @throws IOException
* @throws @author
* Li_Wei
*/
@Test
public void addUser() throws IOException {
// 3.使用sqlSessionFactory对象,创建SqlSession对象,开启自动提交事务
SqlSession sqlSession = this.getSqlSessionFactory().openSession(true);
// 调用方法执行
User user = new User();
user.setId(4);
user.setUsername("林诗音");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("来自大明朝");
sqlSession.insert("mybatis.addUser", user);
// 事务提交
// sqlSession.commit();
// 释放资源
sqlSession.close();
}
/**
* @Title: deleteUser
* @Description: 根据用户id删除用户
* @param:
* @return: void
* @throws IOException
* @throws @author
* Li_Wei
*/
@Test
public void deleteUser() throws IOException {
// 创建SqlSession对象
SqlSession sqlSession = this.getSqlSessionFactory().openSession(true);
// 调用方法执行
sqlSession.delete("mybatis.deleteUser", 3);
// 释放资源
sqlSession.close();
}
/**
* @Title: updateUser
* @Description: 根据用户id修改用户
* @param:
* @return: void
* @throws IOException
* @throws @author
* Li_Wei
*/
@Test
public void updateUserById() throws IOException {
// 创建SqlSession对象
SqlSession sqlSession = this.getSqlSessionFactory().openSession(true);
// 调用方法执行
// 创建用户对象
User user = new User();
user.setId(1);
user.setUsername("林诗音和小李飞刀");
user.setSex("1");
sqlSession.update("mybatis.updateUserById", user);
// 释放资源
sqlSession.close();
}
/**
* @Title: queryUserById
* @Description: 根据id查询用户(查询)
* @param:
* @return: void
* @throws IOException
* @throws @author
* Li_Wei
*/
@Test
public void queryUserById() throws IOException {
// 3.使用sqlSessionFactory对象,创建SqlSession对象
SqlSession sqlSession = this.getSqlSessionFactory().openSession();
// 4.使用sqlSession对象,调用方法执行
Object user = sqlSession.selectOne("mybatis.queryUserById", 24);
System.out.println(user);
// 5.释放资源
sqlSession.close();
}
/**
* @Title: queryUserNameLike
* @Description: 方式一:根据用户名称模糊查询用户
* @param:
* @return: void
* @throws IOException
* @throws @author
* Li_Wei
*/
@Test
public void queryUserByName1() throws IOException {
// 3.使用sqlSessionFactory对象,创建SqlSession对象
SqlSession sqlSession = this.getSqlSessionFactory().openSession();
// 4.使用sqlSession对象,调用方法执行
List
7、打印结果如下
新增用户:
删除:根据用户id删除用户
修改:根据用户id修改用户
查询:根据id查询
根据用户名称模糊查询:
方式一:使用#{}
方式二:使用${}
方式一与方式二具体看上面的代码。
在方式一与方式二中,我们使用到了#{}与${}两种方式,name这两种方式用什么区别呢?
别名有两种方式:
映射文件加载:两种方法
注意:包扫描需要将映射文件放在相应的包下面
相同点
都是对jdbc的封装,都是持久层的框架,都用于dao层的开发。
不同点