Mybatis Dao开发的两种方式(一)
原始Dao的开发方式:
1、创建数据库配置文件db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名称
jdbc.name=数据库登录用户名
jdbc.pwd=数据库登录密码
2、创建配置文件SqlMapConfig.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>
<!--
加载属性文件
resource:属性文件的相对路径
url:属性文件的绝对路径
-->
<properties resource="config/db.properties">
<!--
配置一些属性
name:属性的名称
value:属性的值
-->
<!--<property name="" value="" /> -->
</properties>
<!--
环境配置
在和Spring整合后改配置将废除
-->
<environments default="development">
<environment id="development">
<!--使用JDBC的事务管理,事务管理交给Mybatis-->
<transactionManager type="JDBC"></transactionManager>
<!--数据库连接池,有Mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.name}" />
<property name="password" value="${jdbc.pwd}" />
</dataSource>
</environment>
</environments>
</configuration>
3、创建PO类
public class User {
private int id;
private String username;
private Date birthday;
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 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 + '\'' +
'}';
}
}
4、创建映射文件
<?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">
<!--
mapper的配置
namespace:命名空间,对SQL进行分类化的管理,进行sql隔离
-->
<mapper namespace="test">
<!--
查询sql语句配置使用select标签
id:该语句的唯一标识,通常称为statement的id
parameterType:输入参数的类型
resultType:返回数据的类型,指定为Java的po类型,则将查询出来的单条记录映射为po对象。
-->
<select id="findUserById" parameterType="int" resultType="com.jack.po.User" >
<!--
要执行的sql语句
#{} :表示一个占位符
#{value} :value表示接受的参数,名称为value,如果参数是简单类型,则名称可以随意起。
-->
SELECT * FROM user WHERE id=#{value}
</select>
<select id="findUserByName" parameterType="String" resultType="com.jack.po.User">
SELECT * FROM user WHERE username LIKE '%${value}%'
</select>
<insert id="insertUserInfo" parameterType="com.jack.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>
<update id="updateUserInfo" parameterType="com.jack.po.User" >
UPDATE user set birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
</update>
<update id="deleteUserInfo" parameterType="int" >
DELETE FROM user WHERE id=#{value}
</update>
</mapper>
5、在SqlMapConfig.xml中引入该映射文件
<!--引入mapper-->
<mappers>
<mapper resource="config/sqlmap/userMapper.xml" />
</mappers>
6、编写Dao接口文件
public interface UserServiceI{
//根据id查询用户的接口
public User findUserById(int id) throws Exception;
//根据用户名查询用户
public List<User> findUserByName(String name) throws Exception;
//插入用户信息
public int insertUserInfo(User user) throws Exception;
//根据id更新用户信息
public void updateUserInfo(User user) throws Exception;
//根据id删除用户信息
public void deleteUserInfo(int id) throws Exception;
}
7、编写接口实现类
public class UserServiceImpl implements UserServiceI{
private SqlSessionFactory sessionFactory;
public UserServiceImpl(SqlSessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
}
@Override
public User findUserById(int id) throws Exception {
SqlSession session = sessionFactory.openSession();
User user = session.selectOne("findUserById",id);
return user;
}
@Override
public List<User> findUserByName(String name) throws Exception {
SqlSession session = sessionFactory.openSession();
List<User> list = session.selectList("findUserByName",name);
return list;
}
@Override
public int insertUserInfo(User user) throws Exception {
SqlSession session = sessionFactory.openSession();
session.insert("insertUserInfo",user);
session.commit();
return user.getId();
}
@Override
public void updateUserInfo(User user) throws Exception {
SqlSession session = sessionFactory.openSession();
session.insert("updateUserInfo",user);
session.commit();
}
@Override
public void deleteUserInfo(int id) throws Exception {
SqlSession session = sessionFactory.openSession();
session.delete("deleteUserInfo",id);
session.commit();
}
}
8、编写测试代码进行测试
public class UserTest {
private SqlSessionFactory sessionFactory;
@Before
public void setUp() throws Exception{
String resource = "config/SqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(in);
}
@Test
public void findUserById(){
UserServiceI userService = new UserServiceImpl(sessionFactory);
try {
User user = userService.findUserById(10);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
@Test
public void findUserByName(){
UserServiceI userService = new UserServiceImpl(sessionFactory);
try {
List<User> list = userService.findUserByName("小明");
for (User user:list) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
@Test
public void insertUserInfo(){
UserServiceI userService = new UserServiceImpl(sessionFactory);
try {
User user = new User();
user.setId(26);
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("甘肃天水");
userService.updateUserInfo(user);
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
public void updateUserInfo(){
UserServiceI userService = new UserServiceImpl(sessionFactory);
try {
User user = new User();
user.setUsername("东方不败");
user.setBirthday(new Date());
user.setSex("0");
user.setAddress("黑木崖");
int id =userService.insertUserInfo(user);
System.out.println(id);
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
@Test
public void deleteUserInfo(){
UserServiceI userService = new UserServiceImpl(sessionFactory);
try {
userService.deleteUserInfo(28);
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
}
Mybatis Dao开发的两种方式(一)的更多相关文章
- MyBatis开发Dao层的两种方式(原始Dao层开发)
本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...
- MyBatis开发Dao层的两种方式(Mapper动态代理方式)
MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...
- MyBatis配置数据源的两种方式
---------------------siwuxie095 MyBatis 配置数据源的两种方式 1.配置方 ...
- MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...
- mybatis批量保存的两种方式(高效插入)
知识点:mybatis中,批量保存的两种方式 1.使用mybatis foreach标签 2.mybatis ExecutorType.BATCH 参考博客:https://www.jb51.net/ ...
- 数据库链接 mybatis spring data jpa 两种方式
jdbc mybatis spring data jpa dao service webservice jaxrs jaxws springmvc w ...
- mybatis调用存储过程的两种方式
先总结和说明一下注意点: 1.如果传入的某个参数可能为空,必须指定jdbcType 2.当传入map作为参数时,必须指定JavaType 3.如果做动态查询(参数为表名,sql关键词),可以使用${} ...
- mybatis 传递参数的两种方式与模糊匹配 很重要
- 在springboot中使用Mybatis Generator的两种方式
介绍 Mybatis Generator(MBG)是Mybatis的一个代码生成工具.MBG解决了对数据库操作有最大影响的一些CRUD操作,很大程度上提升开发效率.如果需要联合查询仍然需要手写sql. ...
随机推荐
- JavaScript 放置在文档最后面可以使页面加载速度更快
JavaScript 放置在文档最后面可以使页面加载速度更快
- 构建基于asp.net core 的docker应用并发布
发布Docker镜像的方法有很多种,asp.net core的发布需要在windows系统中 开门见山,首先保证已经在Centos上安装好了Docker.创建一个asp.net core的webapi ...
- c# mvc 第三方定时 FluentScheduler
开头无关内容,可略过: 最近工作和生活都忙的不可开交了. 工作和生活上都不太顺利,5月底出了车祸回家养伤.6月忙着今年的大事. 给自己鼓鼓励吧 最近重拾nodejs和python,也给自己动力,继续学 ...
- 微信开发之c#下jssdk签名生成
参考文章 :微信JS-SDK 权限签名算法 C#版 这篇文章讲解的的比较详细,而且算法准确,但是这篇文章有几个错误的地方需要注意; url必须动态生成 url不能写死,否则就算结果和官方检测的一致,也 ...
- MVC断点续传
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mv ...
- 序列(DP)(组合数)
这是一个DP题. 我们设\(f[i][j][k]\)表示\(i\)序列长度中放入了\(j\)个元素,其中\(k\)是限定的众数的个数:状态转移方程是 \[f[k][i][j]=f[k][i-1][j- ...
- coffee主题美化内容概要
1.具备自动生浮动标题目录(可隐藏) 2.页首目录概要 3.主标题有明显的标志背景颜色,二级标题缩进合适 4.一级.二级标题下图片缩进合适 5.博客签名 6.背景音乐列表 7.打赏 8.联系方式(QQ ...
- 洛谷P4097 [HEOI2013]Segment(李超线段树)
题面 传送门 题解 调得咱自闭了-- 不难发现这就是个李超线段树,不过因为这里加入的是线段而不是直线,所以得把线段在线段树上对应区间内拆开之后再执行李超线段树的操作,那么复杂度就是\(O(n\log^ ...
- 洛谷P5211 [ZJOI2017]字符串(线段树+乱搞)
题面 传送门 题解 为什么大佬们全都是乱搞的--莫非这就是传说中的暴力能进队,乱搞能AC-- 似乎有位大佬能有纯暴力+玄学优化\(AC\)(不算上\(uoj\)的\(Hack\)数据的话--这要是放到 ...
- 基于LDAP下的Samba服务
基于LDAP下的Samba服务 一.环境情况: 实验环境:俩台机器,分别为2012R2,安装有 AD 并作为域控制器Domain Controller(DC),同时也作为 DNS 服务器和时间服务器: ...