MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取
结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)
映射成数据库中的记录。说来说去mybatis本身只是一个数据库的操作工具(框架),他的优点就是通过配置XML文件以及映射的方式来对数据库进行
操作。
1.首先还是准备一下需要的jar包,mybatis需要jar包合集进行下载。本文使用IDEA开发工具,相较于eclipse本人还是喜欢这个新一点的开发工具,界面
什么的要更养眼一些。
2.首先创建一个javaEE文件
直接下一步,
这一步可以不需要打对号,因为没有用到web内容。紧接着下一步
至此java工程创建完毕,创建以后的工程目录如下
我们需要创建一个lib根目录,创建完成以后,需要对工程结构进行配置,点击快捷工具栏project structure,选择左侧的library如下图,把lib文件夹作为
工程java依赖文件目录。
下一步需要创建一个作为resource文件的根目录,这里面我创建了一个config的目录,作为resource文件目录,如下图修改过程
到此,目录结构就完成了,需要将mybatis需要的所有jar包放到lib文件夹下面。完成以后的工程目录如下图:
1.首先在config目录下面创建一个sqlmap文件夹,用来存放数据库属性(*.properties)文件以及映射文件(.xml)。
数据库属性配置文件mysql.properties如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb1
jdbc.username=root
jdbc.password=123456
配置一些数据库的基本参数,即数据库地址,使用的账户的用户名,密码。
映射文件取名为user.xml(因为我要操作一个user表),待我们把下一步配置mybatis全局文件配置好以后再来说这个文件。
2.然后在config目录下创建一个XML配置文件,取名SqlMapConfig.xml,这是mybatis框架的全局配置文件,内容如下:
顺便把log4j.properties文件配置一下(config下创建此文件,目的是使用log),内容如下:
# Global logging configuration
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
需要注意的是log4j.rootLogger=DEBUG,测试的时候使用debug生产环境改为error.
3.映射文件的配置(user.xml)
这种方式是普通接口开发方式,即写dao接口和dao的实现类,另一种是mapper代理开发的方式(具体在另一篇博客讲述)
-- 将插入的最后一条数据的主键返回给要插入的对象user中,此方法只对主键自增有效
SELECT LAST_INSERT_ID()
INSERT INTO USER(username,password,sex,address) VALUES (#{username},#{password},#{sex},#{address})
DELETE FROM USER WHERE username = #{username}
DELETE FROM USER WHERE id = #{id}
UPDATE USER SET username=#{username},password=#{password},sex=#{sex},address=#{address} WHERE id=#{id}
对应的user类
public class User {
private int id;
private String username;
private String password;
private String sex;
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
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 + '\'' +
", password='" + password + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
dao接口以及实现类
public interface UserDao {
/**
* 根据id查询User表记录
* @param id
* @return
* @throws Exception
*/
public User findUserById(int id) throws Exception;
/**
* 向User表添加记录
* @param user
* @throws Exception
*/
public void insertUser(User user) throws Exception;
/**
* 删除user表中的记录
* @param id
* @throws Exception
*/
public void deleteUser(int id) throws Exception;
}
实现类
public class UserDaoImp implements UserDao{
private final SqlSessionFactory sessionFactory;
//需要向dao接口实现类中注入SqlSessionFactory,通过构造方法注入
public UserDaoImp(SqlSessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public User findUserById(int id) throws Exception {
SqlSession sqlSession = null;
try {
sqlSession = sessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById",id);
return user;
} catch (Exception e) {
e.printStackTrace();
}finally {
sqlSession.close();
}
return null;
}
@Override
public void insertUser(User user) throws Exception {
SqlSession sqlSession = null;
try {
sqlSession = sessionFactory.openSession();
sqlSession.insert("test.insertUser",user);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
}finally {
sqlSession.close();
}
}
@Override
public void deleteUser(int id) throws Exception {
SqlSession sqlSession = null;
try {
sqlSession = sessionFactory.openSession();
sqlSession.delete("test.deleteUserById",id);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
}finally {
sqlSession.close();
}
}
}
小结:以上就是对一个user表使用mybatis框架开发的小案例,其中代理接口使用实现类来操作,下一篇紧接着本篇写另外
一种mapper接口,不需要实现类的操作方法.(详情请移步:使用mapper接口开发,无需实现类操作增删改查).