原始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开发的两种方式(一)的更多相关文章

  1. MyBatis开发Dao层的两种方式(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...

  2. MyBatis开发Dao层的两种方式(Mapper动态代理方式)

    MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...

  3. MyBatis配置数据源的两种方式

    ---------------------siwuxie095                                     MyBatis 配置数据源的两种方式         1.配置方 ...

  4. MyBatis获取参数值的两种方式

    MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...

  5. mybatis批量保存的两种方式(高效插入)

    知识点:mybatis中,批量保存的两种方式 1.使用mybatis foreach标签 2.mybatis ExecutorType.BATCH 参考博客:https://www.jb51.net/ ...

  6. 数据库链接 mybatis spring data jpa 两种方式

    jdbc mybatis                     spring data jpa dao service webservice jaxrs     jaxws  springmvc w ...

  7. mybatis调用存储过程的两种方式

    先总结和说明一下注意点: 1.如果传入的某个参数可能为空,必须指定jdbcType 2.当传入map作为参数时,必须指定JavaType 3.如果做动态查询(参数为表名,sql关键词),可以使用${} ...

  8. mybatis 传递参数的两种方式与模糊匹配 很重要

  9. 在springboot中使用Mybatis Generator的两种方式

    介绍 Mybatis Generator(MBG)是Mybatis的一个代码生成工具.MBG解决了对数据库操作有最大影响的一些CRUD操作,很大程度上提升开发效率.如果需要联合查询仍然需要手写sql. ...

随机推荐

  1. Unity3D 之PC客户端的分辨率自定义

    在Player Setting中可以自定义分辨率,但在PC版本中如果使用Display Resolution Dialog选项,会发现在分辨率选项中只有预定义的那些,而并没有在Player Setti ...

  2. Entity Framework 6 暂停重试执行策略

    EF6引入一个弹性连接的功能,也就是允许重新尝试执行失败的数据库操作.某些复杂的场景中,可能需要启用或停用重试执行的策略,但是EF框架暂时尚未提供直接的设置开关,将来可能会加入这种配置.幸运的是,很容 ...

  3. iis 部署webapi常见错误及解决方案

    iis 部署webapi常见错误及解决方案 错误一: 原因:asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问, ...

  4. 重新理解javascript回调函数

    把函数作为参数传入到另一个函数中.这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB.当B层要用到某个模块的数据,于 ...

  5. 【selenium专题】元素定位之多层框架和窗口

    本节知识点 多层框架或窗口切换样式:WebDrvier.switchto().TargetLocator Interface WebDriver.TargetLocator下所有可切换对象 参考API ...

  6. 《Beginning Java 7》 - 1 - Initializer 初始化器

    Initializer 分两类:class initializer 类初始化器   instance initializer 实例初始化器 1. class initializer,在编译时运行,通过 ...

  7. APIO2012 派遣dispatching | 左偏树

    题目链接:戳我 就是尽可能地选取排名小的,加起来就可以了.然后我们考虑利用一个大根堆,一个一个合并,如果超过派遣的钱,我们就把费用最大的那个忍者丢出队列. 左偏树,作为一个十分优秀的可并堆,我们这道题 ...

  8. ItemContainerStyleSelector

    ItemContainerStyleSelector是容器Style选择器 用法和ItemTemplateSelector差不多 同样也是也是继承类 StyleSelector,也是重写方法Selec ...

  9. 在Java中如何优雅地判空

    判空灾难 ​ 作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException. 不过NullPointerException对于很多猿们来 ...

  10. TCP/IP学习笔记(3)-IP、ARP、RARP协议

    这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据 ...