MyBatis(3)开发dao方法
本次全部学习内容:MyBatisLearning

在UserDao.java接口中:
public interface UserDao {
//根据id查询用户信息
public User findUserById(int id) throws Exception;
//添加用户信息
public void insertUser(User user) throws Exception;
//删除用户信息
public void deleteUser(int id) throws Exception;
}
//UserDao的实现类
public class UserDaoImp implements UserDao {
//需要向dao实现类里面注入SqlSessionFactory
//通过构造器注入
private SqlSessionFactory SqlSessionFactory;
public UserDaoImp(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 void insertUser(User user) throws Exception {
SqlSession sqlSession = SqlSessionFactory.openSession();
sqlSession.insert("test.addUser", 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();
}
}
在testUserDaoImp.java中:
public class testUserDaoImp { private SqlSessionFactory SqlSessionFactory;
public SqlSessionFactory getSqlSessionFactory() throws IOException{
//配置文件的
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工程
SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return SqlSessionFactory;
} //根据id查询用户信息
@Test
public void findUserById() throws Exception{
SqlSessionFactory SqlSessionFactory = getSqlSessionFactory();
UserDao userdao = new UserDaoImp(SqlSessionFactory);
User user = userdao.findUserById(1);
System.out.println(user);
}
//添加用户信息
}
控制台:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 2054574951.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@7a765367]
DEBUG [main] - ==> Preparing: select * from user where id=?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 1
//添加用户信息
@Test
public void testAddUser() throws Exception{
SqlSessionFactory SqlSessionFactory = getSqlSessionFactory();
UserDao userdao = new UserDaoImp(SqlSessionFactory);
User user = new User();
user.setUsername("Ma");
user.setSex(1);
user.setAddress("安徽");
userdao.insertUser(user); }
控制台:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 22429093.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1563da5]
DEBUG [main] - ==> Preparing: insert into user(id,username,birthday,sex,address) value(?,?,?,?,?)
DEBUG [main] - ==> Parameters: 0(Integer), Ma(String), null, 1(Integer), 安徽(String)
DEBUG [main] - <== Updates: 1
DEBUG [main] - ==> Preparing: SELECT LAST_INSERT_ID()
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 1
//删除用户信息
@Test
public void testDelete() throws Exception{
SqlSessionFactory SqlSessionFactory = getSqlSessionFactory();
UserDao userdao = new UserDaoImp(SqlSessionFactory);
userdao.deleteUser(29);
}
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 22429093.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1563da5]
DEBUG [main] - ==> Preparing: delete from user where id=?
DEBUG [main] - ==> Parameters: 29(Integer)
DEBUG [main] - <== Updates: 1
DEBUG [main] - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1563da5]
- Mapper.xml文件中的namespace与mapper接口的类路径相同。
- Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
- Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
- Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
- Mapper接口方法名和Mapper.xml中定义的statement的id相同
- Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameterType的类型相同
- Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同

<mappers>
<mapper resource="sqlmap/User.xml"/>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
在UserMapper.java接口中:
//根据id查询用户信息
public User findUserById(int id) throws Exception;
<mapper namespace="com.MrChengs.mapper.UserMapper">
<!-- 根据id查询 -->
<!-- public User findUserById(int id) throws Exception; -->
<select id="findUserById" parameterType="int" resultType="com.MrChengs.po.User">
select * from user where id=#{id}
</select>
</mapper>
在测试类testUserMapper.java类中
private SqlSessionFactory SqlSessionFactory;
public SqlSessionFactory getSqlSessionFactory() throws IOException{
//配置文件的
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工程
SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return SqlSessionFactory;
}
@Test
public void testfindUserById() throws Exception{
//得到sqlsession
SqlSession sqlSession = getSqlSessionFactory().openSession();
//创建UserMapper的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用userMapper的方法
User user = mapper.findUserById(27);
System.out.println(user);
sqlSession.close();
}
实现成功:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 352359770.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1500955a]
DEBUG [main] - ==> Preparing: select * from user where id=?
DEBUG [main] - ==> Parameters: 27(Integer)
DEBUG [main] - <== Total: 1
User [id=27, username=MrChegns, birthday=Fri Oct 05 00:00:00 CST 2018, sex=2, address=北京]
//根据用户名查询(模糊查询)
public List<User> findByName(String name) throws Exception;
<!-- 根据用户名查询 -->
<select id="findByName" parameterType="java.lang.String" resultType="com.MrChengs.po.User" >
select * from user where username Like '%${value}%'
</select>
测试类:
@Test
public void testfindByName() throws Exception{
SqlSession sqlSession = getSqlSessionFactory().openSession(); //创建UserMapper的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class); //调用userMapper的方法
List<User> users = mapper.findByName("小明");
for(User user:users){
System.out.println(user);
}
sqlSession.close();
}
查询成功:
DEBUG [main] - ==> Preparing: select * from user where username Like '%小明%'
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 3
User [id=16, username=张小明, birthday=null, sex=1, address=河南郑州]
User [id=22, username=陈小明, birthday=null, sex=1, address=河南郑州]
User [id=25, username=陈小明, birthday=null, sex=1, address=河南郑州]
MyBatis(3)开发dao方法的更多相关文章
- 使用mybatis开发dao方法
使用mybatis开发dao的时候, 主要涉及到SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession 这三个类 现在将这三个类的使用方法简单的说下 ...
- Mybatis的mapper代理开发dao方法
看完了之前的mybatis原始的dao开发方法是不是觉得有点笨重,甚至说没有发挥mybatis 作为一个框架的优势.总结了一下,原始的dao方法有以下几点不足之处 dao接口实现方法中存在大量的模板方 ...
- 09_Mybatis开发Dao方法——mapper代理开发规范
一.开发规范 需要编写mapper.xml映射文件(本项目为userMapper.xml,类似于前面的user.xml). 编写mapper接口需要遵循一些开发规范,这样MyBatis可以自动生成ma ...
- 10_Mybatis开发Dao方法——mapper代理实现
[工程截图(几个关键的标红框)] [UserMapper.xml] <?xml version="1.0" encoding="UTF-8"?> & ...
- 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...
- MyBatis学习--mybatis开发dao的方法
简介 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. 主要概念介绍: MyBatis中进行Dao开发时候有几个重要的类,它们是SqlSessionFac ...
- 四 mybatis开发dao的方法
mybatis开发dao的方法 1.1 SqlSession使用范围 1.1.1 SqlSessionFactoryBuilder //以流的方式读取总的配置文件 Reader rea ...
- 【mybatis基础】mybatis开发dao两种方法
mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目.mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.mybat ...
- mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)
5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...
随机推荐
- VS快捷键设置无效
使用Resharper 后发现有些快捷键冲突,但是在工具-选项-键盘 设置后不管用,后来发现有一个移除功能,即移走原来的快捷键; 先选择下拉框1中自己用不到的快捷键,然后移除掉; 备注: 注意观察 快 ...
- ASP.NET Web API根据代码注释生成Help文档
使用Visual Studio新建一个ASP.NET Web API项目,直接运行,查看Help文档可以看到如下的API帮助说明 如何在Description中显示描述. 1. 打开Controlle ...
- Springboot简单整合Rabbit
两个项目.分别是生产者和消费者项目 .首先引入依赖.两边pom都一样 第一次练习,启动生产者后,再启动消费者,一直报找不到 队列的声明. 后排查发现是 需要现在生产者这边浏览器访问一次生产消息的方法 ...
- python使用元类
原文:https://blog.csdn.net/youzhouliu/article/details/51906158 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义 ...
- webpack_hmr报错 cannot load 状态500
使用vue-cli时,启动本地环境,然后页面没有关闭,直接切换到线上环境,过一会会发起一个http://xxx/__webpack_hmr请求,会报cannot load原因:它属于nodejs中的一 ...
- MySQL主从复制与读写分离概念及架构分析
1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...
- 4 关于word2vec的skip-gram模型使用负例采样nce_loss损失函数的源码剖析
tf.nn.nce_loss是word2vec的skip-gram模型的负例采样方式的函数,下面分析其源代码. 1 上下文代码 loss = tf.reduce_mean( tf.nn.nce_los ...
- addEventListener(event, function, useCapture) 简记
监听事件方法:addEventListener(<event-name>, <callback>, <use-capture>) 移除监听事件方法:removeEv ...
- Android学习——文件存储
在Andriod开发中,文件存储和Java的文件存储类似.但需要注意的是,为了防止产生碎片垃圾,在创建文件时,要尽量使用系统给出的函数进行创建,这样当APP被卸载后,系统可以将这些文件统一删除掉.获取 ...
- Windows ->> FIX: “The security database on the server does not have a computer account for this workstation trust relationship”
前几天在做AlwaysOn实验时遇到搭建活动目录域时某台已经加入AD的机器无法以域管理员账户登录的情况. 报错信息是:The security database on the server does ...