Mybatis配置及详细说明
2018-01-20 16:31
169 查看
1. Mybatis的介绍
1.1 什么是Mybatis?
Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache
software foundation 迁移到了google code,并且改名为MyBatis
。2013年11月迁移到Github。
1.2 特点:
Mybatis是支持普通SQL查询,存储过程和高级映射的持久层框架。对JDBC的操作数据库过程进行封装,可使用简单的xml或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录。
2.Mybatis入门
2.1 mybatis的架构图
2.2 mybatis配置并实现对数据库的CRUD步骤
前提:
mybatis下载 网址: https://github.com/mybatis/mybatis-3/releases
mybatis-3.2.7.jar mybatis的核心包
lib文件夹 mybatis的依赖包所在
mybatis-3.2.7.pdf mybatis使用手册
下载数据库驱动包: mysql-connector-java-5.1.40-bin.jar
加入mybatis核心包、依赖包、数据驱动包。
(1). config.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>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development"> default: development:开发模式 / work:工作模式
<environment id="development"> id:数据源标志
<!-- 使用jdbc事务管理 -->
<transactionManager type = "JDBC" /> JDBC:JDBC事务 ;Manage:容器方式管理事务;自定义
<!-- 数据库连接池 -->
<dataSource type="POOLED"> JNDI:JNDI数据源 ;UNPOOLED:非数据库连接池
;自定义
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="mapper/mapper.xml"/> 完整路径:包名.类名
</mappers>
</configuration>
(2). mapper.xml:
sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在config.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 -->
<mapper namespace="mapper.mapper">
<!-- id:statement的id 或者叫做sql的id-->
<!-- parameterType:声明输入参数的类型 -->
<!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
<!-- #{}:输入参数的占位符,相当于jdbc的? -->
<!-- 查询用户 -->
<select id="selectAllUser" parameterType="int" resultType="user.User">
Select * from mybatis
</select>
<select id="selectUserById" parameterType="int" resultType="user.User">
Select * from mybatis where id=#{id}
</select>
<select id="selectUserBylike" parameterType="int" resultType="user.User">
Select * from mybatis where username like #{username}
</select>
<!-- 修改用户 -->
<update id="UpdateAllUser" parameterType="user.User" >
Update mybatis set username = #{username}, age = #{age}
</update>
<update id="UpdateUserById" parameterType="user.User" >
Update mybatis set username = #{username} where id = #{id}
</update>
<!-- 增加用户 -->
<insert id="insertUser" parameterType="user.User" >
insert into mybatis(id,username,age) values(#{id}, #{username}, #{age});
</insert>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="user.User" >
delete from mybatis where id = #{id};
</delete>
</mapper>
(3).configMJBC.java
通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂;
由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
public class MJdbc {
/**
* 获取SqlSessionFactory
*/
public static SqlSessionFactory getssFactory(){
String resource ="config.xml";
InputStream is = MJdbc.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
return ssf;
}
/**
* 获取SqlSession
*/
public static SqlSession getSqlSession(){
return getssFactory().openSession() ;
}
/**
* 获取SqlSession
* @param isAutoCommit
* true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,
* 这时就需要我们手动调用sqlSession.commit()提交事务
* @return SqlSession
*/
public static SqlSession getSqlss(boolean isAutoCommit){
return getssFactory().openSession(false) ;
}
}
(4).配置接口 IUser.java
/**
* 使用@Select注解指明SelectUserById方法要执行的SQL
* 根据Id查询用户
* @param id
*/
@Select("Select * from mybatis where id=#{id}")
public User SelectUserById();
/**
* 查询所有用户
* @return
*/
@Select("Select * from mybatis")
public void SelectAllUser();
/**
* 根据用户名模糊查询用户
*/
@Select("Select * from mybatis where username like %b%")
public void SelectUserBylike();
/**
* 根据Id修改用户
*/
@Update("Update mybatis set name = bao where id=#{id}")
public void UpdateUserById();
/**
* 修改全部用户
*/
@Update("Update mybatis set username = #{username} ")
public void UpdateAllUser();
/**
* 添加用户
*/
@Insert("insert into mybatis(id,username,age) values(#{id}, #{username}, #{age})")
public void InsertUser();
/**
* 删除用户
*/
@Delete("delete from mybatis where id = #{id}")
public void DeleteUser();
}
(5).配置IUser接口的实现类 M_test.java
public class M_test implements IUser{
public static void main(String[] args) {
M_test mt = new M_test();
mt.SelectUserById();
// mt.SelectAllUser();
// mt.UpdateUserById();
// mt.UpdateAllUser();
// mt.SelectUserBylike();
// mt.InsertUser();
// mt.DeleteUser();
}
@Override
public User SelectUserById() {
SqlSession sqlSession = MJdbc.getSqlSession();
Object object = sqlSession.selectOne("mapper.mapper.selectUserById",2);
System.out.println(object);
return (User) object;
}
@Override
public void SelectAllUser() {
SqlSession sqlSession = MJdbc.getSqlSession();
List<Object> list = sqlSession.selectList("mapper.mapper.selectAllUser");
System.out.println(list);
sqlSession.close();
}
@Override
public void SelectUserBylike() {
SqlSession sqlSession = MJdbc.getSqlSession();
List<Object> list= sqlSession.selectList("mapper.mapper.selectUserBylike", "%b%");
System.out.println(list);
}
@Override
public void UpdateUserById() {
User user = new User();
user.setId(1);
user.setUsername("bao");
user.setAge(16);
SqlSession sqlSession = MJdbc.getSqlSession();
sqlSession.update("mapper.mapper.UpdateUserById",user);
sqlSession.commit();
sqlSession.close();
}
@Override
public void UpdateAllUser() {
User user = new User();
user.setUsername("ba");
user.setAge(1);
SqlSession sqlSession = MJdbc.getSqlSession();
sqlSession.update("mapper.mapper.UpdateAllUser",user);
sqlSession.commit();
sqlSession.close();
}
@Override
public void InsertUser() {
User user = new User();
user.setId(7);
user.setUsername("11");
user.setAge(18);
SqlSession sqlSession = MJdbc.getSqlSession();
int adduser = sqlSession.insert("mapper.mapper.insertUser",user);
System.out.println(adduser);
sqlSession.commit();
sqlSession.close();
}
@Override
public void DeleteUser() {
SqlSession sqlSession = MJdbc.getSqlSession();
int uid = sqlSession.delete("mapper.mapper.deleteUser", 7);
System.out.println(uid);
}
(6).小结:
6.1 测试程序步骤:
a. 创建SqlSessionFactoryBuilder对象
b. 加载SqlMapConfig.xml配置文件
c. 创建SqlSessionFactory对象
d. 创建SqlSession对象
e. 执行SqlSession对象执行查询,获取结果User
f. 打印结果
g. 释放资源
6.2 #{}和${}区别:
1.1 什么是Mybatis?
Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache
software foundation 迁移到了google code,并且改名为MyBatis
。2013年11月迁移到Github。
1.2 特点:
Mybatis是支持普通SQL查询,存储过程和高级映射的持久层框架。对JDBC的操作数据库过程进行封装,可使用简单的xml或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录。
2.Mybatis入门
2.1 mybatis的架构图
2.2 mybatis配置并实现对数据库的CRUD步骤
前提:
mybatis下载 网址: https://github.com/mybatis/mybatis-3/releases
mybatis-3.2.7.jar mybatis的核心包
lib文件夹 mybatis的依赖包所在
mybatis-3.2.7.pdf mybatis使用手册
下载数据库驱动包: mysql-connector-java-5.1.40-bin.jar
加入mybatis核心包、依赖包、数据驱动包。
(1). config.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>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development"> default: development:开发模式 / work:工作模式
<environment id="development"> id:数据源标志
<!-- 使用jdbc事务管理 -->
<transactionManager type = "JDBC" /> JDBC:JDBC事务 ;Manage:容器方式管理事务;自定义
<!-- 数据库连接池 -->
<dataSource type="POOLED"> JNDI:JNDI数据源 ;UNPOOLED:非数据库连接池
;自定义
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="mapper/mapper.xml"/> 完整路径:包名.类名
</mappers>
</configuration>
(2). mapper.xml:
sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在config.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 -->
<mapper namespace="mapper.mapper">
<!-- id:statement的id 或者叫做sql的id-->
<!-- parameterType:声明输入参数的类型 -->
<!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
<!-- #{}:输入参数的占位符,相当于jdbc的? -->
<!-- 查询用户 -->
<select id="selectAllUser" parameterType="int" resultType="user.User">
Select * from mybatis
</select>
<select id="selectUserById" parameterType="int" resultType="user.User">
Select * from mybatis where id=#{id}
</select>
<select id="selectUserBylike" parameterType="int" resultType="user.User">
Select * from mybatis where username like #{username}
</select>
<!-- 修改用户 -->
<update id="UpdateAllUser" parameterType="user.User" >
Update mybatis set username = #{username}, age = #{age}
</update>
<update id="UpdateUserById" parameterType="user.User" >
Update mybatis set username = #{username} where id = #{id}
</update>
<!-- 增加用户 -->
<insert id="insertUser" parameterType="user.User" >
insert into mybatis(id,username,age) values(#{id}, #{username}, #{age});
</insert>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="user.User" >
delete from mybatis where id = #{id};
</delete>
</mapper>
(3).configMJBC.java
通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂;
由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
public class MJdbc {
/**
* 获取SqlSessionFactory
*/
public static SqlSessionFactory getssFactory(){
String resource ="config.xml";
InputStream is = MJdbc.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
return ssf;
}
/**
* 获取SqlSession
*/
public static SqlSession getSqlSession(){
return getssFactory().openSession() ;
}
/**
* 获取SqlSession
* @param isAutoCommit
* true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,
* 这时就需要我们手动调用sqlSession.commit()提交事务
* @return SqlSession
*/
public static SqlSession getSqlss(boolean isAutoCommit){
return getssFactory().openSession(false) ;
}
}
(4).配置接口 IUser.java
/**
* 使用@Select注解指明SelectUserById方法要执行的SQL
* 根据Id查询用户
* @param id
*/
@Select("Select * from mybatis where id=#{id}")
public User SelectUserById();
/**
* 查询所有用户
* @return
*/
@Select("Select * from mybatis")
public void SelectAllUser();
/**
* 根据用户名模糊查询用户
*/
@Select("Select * from mybatis where username like %b%")
public void SelectUserBylike();
/**
* 根据Id修改用户
*/
@Update("Update mybatis set name = bao where id=#{id}")
public void UpdateUserById();
/**
* 修改全部用户
*/
@Update("Update mybatis set username = #{username} ")
public void UpdateAllUser();
/**
* 添加用户
*/
@Insert("insert into mybatis(id,username,age) values(#{id}, #{username}, #{age})")
public void InsertUser();
/**
* 删除用户
*/
@Delete("delete from mybatis where id = #{id}")
public void DeleteUser();
}
(5).配置IUser接口的实现类 M_test.java
public class M_test implements IUser{
public static void main(String[] args) {
M_test mt = new M_test();
mt.SelectUserById();
// mt.SelectAllUser();
// mt.UpdateUserById();
// mt.UpdateAllUser();
// mt.SelectUserBylike();
// mt.InsertUser();
// mt.DeleteUser();
}
@Override
public User SelectUserById() {
SqlSession sqlSession = MJdbc.getSqlSession();
Object object = sqlSession.selectOne("mapper.mapper.selectUserById",2);
System.out.println(object);
return (User) object;
}
@Override
public void SelectAllUser() {
SqlSession sqlSession = MJdbc.getSqlSession();
List<Object> list = sqlSession.selectList("mapper.mapper.selectAllUser");
System.out.println(list);
sqlSession.close();
}
@Override
public void SelectUserBylike() {
SqlSession sqlSession = MJdbc.getSqlSession();
List<Object> list= sqlSession.selectList("mapper.mapper.selectUserBylike", "%b%");
System.out.println(list);
}
@Override
public void UpdateUserById() {
User user = new User();
user.setId(1);
user.setUsername("bao");
user.setAge(16);
SqlSession sqlSession = MJdbc.getSqlSession();
sqlSession.update("mapper.mapper.UpdateUserById",user);
sqlSession.commit();
sqlSession.close();
}
@Override
public void UpdateAllUser() {
User user = new User();
user.setUsername("ba");
user.setAge(1);
SqlSession sqlSession = MJdbc.getSqlSession();
sqlSession.update("mapper.mapper.UpdateAllUser",user);
sqlSession.commit();
sqlSession.close();
}
@Override
public void InsertUser() {
User user = new User();
user.setId(7);
user.setUsername("11");
user.setAge(18);
SqlSession sqlSession = MJdbc.getSqlSession();
int adduser = sqlSession.insert("mapper.mapper.insertUser",user);
System.out.println(adduser);
sqlSession.commit();
sqlSession.close();
}
@Override
public void DeleteUser() {
SqlSession sqlSession = MJdbc.getSqlSession();
int uid = sqlSession.delete("mapper.mapper.deleteUser", 7);
System.out.println(uid);
}
(6).小结:
6.1 测试程序步骤:
a. 创建SqlSessionFactoryBuilder对象
b. 加载SqlMapConfig.xml配置文件
c. 创建SqlSessionFactory对象
d. 创建SqlSession对象
e. 执行SqlSession对象执行查询,获取结果User
f. 打印结果
g. 释放资源
6.2 #{}和${}区别:
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
6.3 parameterType和resultType:
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中
6.4 selectOne和selectList:
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
selectList可以查询一条或多条记录。
相关文章推荐
- mybatis配置流程详细说明 最清晰 (包含测试方法)
- Myeclipse的插件mybatis-generator创建的配置文件generatorConfig.xml的配置详细说明
- MyBatis配置Setting详细说明
- mybatis-config详细配置说明
- nginx.conf详细说明和负载均衡配置
- Nginx配置文件详细说明
- Nginx详细配置的备注说明
- 【转】Nginx配置文件详细说明
- Build.gradle详细配置说明
- Mybatis原理解析之-配置说明
- SVN 权限配置详细说明
- mybatis配置说明
- C3P0的详细配置说明(com.mchange.v2.c3p0.ComboPooledDataSource)
- (转载)详细的log4j配置说明
- Nginx配置文件详细说明
- 转 springMVC+mybatis+ehcache详细配置
- MyBatis-Generator的配置说明和使用
- Nginx配置文件详细说明
- Highcharts选项配置详细说明文档(zz)
- Nginx配置文件详细说明