接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的。这样学习起来,方向性也会更强一些。我对于mybatis的理解是,
它是一个封装了JDBC的java框架。所能实现的功能是对数据库进行增删查改的功能。

首先,需要搭建一个demo,用于学习这个框架的使用方式。
(1)在IDE上建立自己的工程目录,一个普通的java工程项目就好,我电脑本地的IDE是Myeclipse。
(2)引入搭建框架需要的jar包,这个直接去网上搜索就好。
(3)框架的核心实现都是基于配置的,引入jar包后,先配置mybatis的核心xml文件,我自己命名为mybatis.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments> </configuration>
environments 和 environment这两个标签,里面的属性值,我直接按照官方提供的API定义,重点是dataSource标签下面的子标签,四个property分别用于指定数据库连接驱动,数据库连接地址,用户名、密码。这些信息统一使用properties文件配置。properties文件的信息如下

  driver = com.mysql.jdbc.Driver
  url = jdbc:mysql://localhost:3306/crm
  username = root
  password =root

(4)上面的配置是一些全局配置,下一步需要建立一个实体,映射mysql数据库中的某张表,我这里的表名叫A。建立的实体类叫User

public class User {

    private Integer id ;

    private String name ;

    private String age ; 

    private String score ;

    public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
} public String toString(){
return "id = " + id + " "
+"name = " + name + " "
+"age = " + age + " "
+"score = " + score + " ";
}
}

建立好实体类后,再去配置实体类对应的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"> <mapper namespace="com.test.IUserOperation"> <select id="getSingle" parameterType="int" resultType="com.domain.User">
select * from A where id = #{id}
</select>
<select id="ALL" parameterType="int" resultType="com.domain.User">
select * from A
</select> <delete id="deleteOne" parameterType="com.domain.User">
delete from A where id = #{id}
</delete> <select id="findByUserId" parameterType="int" resultType="com.domain.User">
select * from A where id = #{id}
</select> <insert id="addUser" parameterType="com.domain.User" useGeneratedKeys="false" keyProperty="id">
insert into A values (#{id},#{name},#{age},#{score})
</insert> <update id="updateUser" parameterType="com.domain.User" >
update A set name = #{name},age = #{age},score = #{score} where id = #{id}
</update> <delete id="deleteUser" parameterType="int">
delete from A where id = #{id}
</delete> </mapper>

这个配置里的namespace必须是唯一的,而且是你需要映射的实体类的绝对路径,我这边设计为基础接口的开发方式,所以映射到的是我的接口。接口里定义了相关的增添查改的方法,配置如下

interface IUserOperation{
User findByUserId(Integer id);
void addUser(User u );
void updateUser(User u);
void deleteUser(Integer id);
}

接口中的方法名,对应xml文件里的select、update、insert、delete标签下的id名字,必须完全相同,否则会报错。在对应的标签下,编写你想要实现的sql语句。其中的#{id}、#{name}这些是用于接收参数的。编写完后,就可以写测试类去测试啦。

public class MyBatisTest {
private static final String confPath = "mybatis.xml";
private static final String propertiesPath = "message.properties";
private static SqlSessionFactory ssf = null;
private static SqlSession session = null; static{
InputStream in = MyBatisTest.class.getClassLoader().getResourceAsStream(confPath);
Properties pro = new Properties();
try {
pro.load(MyBatisTest.class.getClassLoader().getResourceAsStream(propertiesPath));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ssf = new SqlSessionFactoryBuilder().build(in,pro);
session = ssf.openSession();
} /**
* 查询测试
*/
public static void testSelect(){ IUserOperation iUser = session.getMapper(IUserOperation.class);
User u = iUser.findByUserId(5);
System.out.println(u.toString());
session.close(); } /**
* 删除测试
*/
public static void testDelete(){
IUserOperation iUser = session.getMapper(IUserOperation.class);
iUser.deleteUser(14);
session.commit();
session.close();
} /**
* 修改数据
*/
public static void testUpdate(){
IUserOperation iUser = session.getMapper(IUserOperation.class);
User u = new User();
u.setId(3);
u.setName("TEST_COME");
u.setAge("87");
u.setScore("100");
iUser.updateUser(u);
session.commit(); session.close();
} /**
* 数据添加
*/
public static void testAdd(){
IUserOperation iUser = session.getMapper(IUserOperation.class); User u = new User();
u.setId(14);
u.setAge("33");
u.setName("liberation");
u.setScore("**"); iUser.addUser(u);
session.commit();
session.close();
} public static void main(String[] args) {
//testAdd();
//testUpdate();
//testDelete();
testSelect();
} }

官方API上建议,把session设置为局部变量,我这里偷懒,设为全局变量。

最新文章

  1. CodeIgniter 3.0问题集锦
  2. SVN分支和映射总结和数据库初步使用
  3. svn使用方法介绍(1)
  4. ajax重构XMLHttpRequest
  5. MySQL DATE_SUB() 函数
  6. mapgis处理编辑属性结构时 死机问题
  7. Ubuntu14.04安装一个小问题,搜狗输入法
  8. 跟着刚哥梳理java知识点——变量之间的类型转换(四)
  9. android自定义动画
  10. js备战春招の三
  11. golang - gob与rpc
  12. 洛谷P3167 通配符匹配 [CQOI2014] 字符串
  13. Util.FSUtils: Waiting for dfs to exit safe mode
  14. 【洛谷p1601】A+B Problem(高精)
  15. Windows Service 之 Bug 记录
  16. Redis (1) —— 安装
  17. Android 8 声音调整过程
  18. shiro中OAuth2 集成
  19. 利用新浪js接口根据ip地址获取实际地址
  20. 对cordova打包的apk文件进行签名

热门文章

  1. HDU2586 How far away? —— 倍增LCA
  2. laravel基础课程---3、路由(Laravel中的常见路由有哪几种)
  3. 基于logstash+elasticsearch+kibana的日志收集分析方案(Windows)
  4. tensorflow 线性回归解决 iris 2分类
  5. MFC中显示一张位图
  6. 并不对劲的CTS2019
  7. AQS共享锁应用之Semaphore原理
  8. HDU2203(KMP入门题)
  9. 896C
  10. struts2 ValueStack的set方法与setValue方法的区别