原始dao开发方法
1。创建User实体类. 实现get和set方法
public class User {
//属性名和数据库表的字段对应
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
}
2.创建dao接口
/*
* dao接口,用户管理
*/
public interface UserDao {
//根据id查询用户信息
public User findUserById(int id) throws Exception;
//根据用户名列查询用户列表
public List<User> findUserByName(String name) throws Exception;
//添加用户信息
public void insertUser(User user) throws Exception;
//删除用户信息
public void deleteUser(int id) throws Exception;
}
3.创建dao接口的实现类
public class UserDaoImpl implements UserDao {
// 需要向dao实现类中注入SqlSessionFactory
// 这里通过构造方法注入
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public User findUserById(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById", id);
// 释放资源
sqlSession.close();
return user;
}
@Override
public List<User> findUserByName(String name) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("test.findUserByName", name);
// 释放资源
sqlSession.close();
return list;
}
@Override
public void insertUser(User user) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行插入操作
sqlSession.insert("test.insertUser", user);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
}
@Override
public void deleteUser(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行插入操作
sqlSession.delete("test.deleteUser", id);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
}
4.创建一个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进行分类华管理 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
<mapper namespace="test">
<!-- 在映射文件中配置很多sql语句 -->
<!-- 需求:通过id查询用户表的记录 #{}表示一个占位符 parameterType指定输入参数的类型 #{id} 其中的id表示输入输出参数,参数名称就是id, -->
<select id="findUserById" parameterType="int" resultType="com.dc.mybatis.po.User">
select *from user where id=#{id}
</select>
<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT
LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)
value(#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 删除 用户 根据id删除用户,需要输入 id值 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where
id=#{id}
</delete>
<update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
update user set
username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id=#{id}
</update>
</mapper>
5.创建一个SqlMapConfig.xml 必须加载User.xml映射文件
<?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" />
<property name="username" value="root"/>
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sqlmap/User.xml"></mapper>
</mappers>
</configuration>
6.创建测试类,来测试程序
public class UserDaoImplTest {
private SqlSessionFactory sqlSessionFactory;
//此方法时在执行testFindUserById之前执行的
@Before
public void setUp() throws Exception{
//创建sqlSessionFactory
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception {
//创建UserDao的对象
UserDao userDao=new UserDaoImpl(sqlSessionFactory);
User user=userDao.findUserById(10);
System.out.println(user);
}
}
mapper代理开发
开发规范:
1、在mapper.xml中namespace等于mapper接口地址
2、mapper.java接口中的方法名和mapper.xml中statement的id一致
3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。
4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。
Mapper代理的实现
1.mapper.java
2.mapper.xml
3.在SqlMapConfig.xml中加载mapper.xml
4.测试
Mybatis的全局配置文件:SqlMapConfig.xml
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
properties:
将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。
typeAliases(类型别名)
mybatis默认支持别名
别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
单个别名定义
<!-- 单个别名定义 -->
<typeAliases>
<!-- 针对单个别名定义
type:类型的路径
alias:别名
-->
<typeAlias type="com.dc.mybatis.po.User" alias="User" />
</typeAliases>
多个别名定义(常用)
<!-- 多个别名定义 -->
<typeAliases>
<!-- 针对单个别名定义
type:类型的路径
alias:别名
-->
<package name="com.dc.mybatis.po" />
</typeAliases>
typeHandlers(类型处理器)
一般我们都不需要去指定,因为他里面有默认的
**mappers(映射器) **
1.加载单个映射文件
2.加载多个映射文件 (常用)
输入映射parameterType
通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型
传递自定义的pojo的包装类型
1.新建一个UserCustom类继承User
//用户的扩展类
public class UserCustom extends User{
//可以扩展用户的信息
}
2.创建包装类型pojo
//包装类型
public class UserQueryVo{
//用户查询条件
private UserCustom userCustom;
public UserCustom getUserCustom() {
return userCustom;
}
public void setUserCustom(UserCustom userCustom) {
this.userCustom = userCustom;
}
}
3.在UserMapper.xml中定义用户信息综合查询
4.创建UserMapper接口
public iinterface UserMapper{
public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception
}
5.测试代码
输出映射
resultType
使用resultType进行输出映射时,只有数据库中的列和pojo类中的属性名一致,才可以映射成功
1.输出简单类型 mapper.xml
需求:查看用户信息列表总数
2.mapper.java
3.测试代码
输出pojo对象和pojo列表
不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。
在mapper.java指定的方法返回值类型不一样:
1、输出单个pojo对象,方法返回值是单个对象类型
2、输出pojo对象list,方法返回值是List<Pojo>
resultMape