您的位置:首页 > 其它

学习SSM之MyBatis

2017-02-11 15:01 176 查看
在做项目的时候与后台对接接口,然而新来的后台哥哥从来没有写过接口经常返回无用的数据或者没有设定默认值,无法直接解析成JavaBean还要自己一个个的Set,然而并卵跟后台对接半天还是这样不对哪里不对的,所以我就自己写吧!当时项目使用Spring MVC+Spring+MyBatis还是我大学的时候学过了,好久没用差不多快忘记了,没办法翻出以前学习的代码简单的回顾了下,在原来的基础上把数据返回回来了.今天忽然又想起所以学习下!先从MyBatis开始学习吧!

错误格式如下:

{

“userId”: “5slgyqGDENN7Sy7pw29IUvrZ “,

“userName”: ,

“nikeName”: “飞翔的小猫”,

“signature”: “飞翔的小猫。。。”

}或者

{

“userId”: “5slgyqGDENN7Sy7pw29IUvrZ “,

“userName”: “null”,

“nikeName”: “飞翔的小猫”,

“signature”: “飞翔的小猫。。。”

}

MyBatis是轻量级的数据库访问API,封装了JDBC操作,可以实现对实体对象的CRUD操作。

MyBatis体系结构主要组成部分:

配置文件:SqlMapConfig.xml 主配置文件

声明了数据库连接参数,引用了映射文件

映射文件: 每个实体一个映射文件

映射文件与 Mapper接口对应。

首先我们创建数据库和Model–这个过程就省略吧!

package org.llp.project.model;

public class UserBean {
/**用户ID*/
private int userID;
/**用户名*/
private String userName;
/**密码*/
private String pwd;
/**性别*/
private String gender;
/**签名*/
private String signature;

/**
* @return the userID
*/
public int getUserID() {
return userID;
}
/**
* @param userID the userID to set
*/
public void setUserID(int userID) {
this.userID = userID;
}
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return the pwd
*/
public String getPwd() {
return pwd;
}
/**
* @param pwd the pwd to set
*/
public void setPwd(String pwd) {
this.pwd = pwd;
}
/**
* @return the gender
*/
public String getGender() {
return gender;
}
/**
* @param gender the gender to set
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
* @return the signature
*/
public String getSignature() {
return signature;
}
/**
* @param signature the signature to set
*/
public void setSignature(String signature) {
this.signature = signature;
}
}


CREATE TABLE `t_user_info` (
`userId` int(32) NOT NULL AUTO_INCREMENT,
`userName` varchar(255) NOT NULL,
`gender` char(8) NOT NULL,
`signature` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


然后去官网下载jar包

下载地址:https://github.com/mybatis/mybatis-3/releases

下载好的zip



把核心包和依赖包导入项目,我们就可以开始使用Mybatis了!

每一个MyBatis都是SqlSessionFactory对象的实例为核心。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来获得。SqlSessionFactory对象获取方式有两种,一种是XML配置文件,另一种是JAVA代码的注解。

第一种:使用XML构建SqlSessionFactory。

首先创建一个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>
<!--配置数据库连接 -->
<environments default="development">
<environment id="development">
<!-- transactionManager 事物方式 -->
<transactionManager type="JDBC"  />
<!-- dataSource 数据库配置 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/project_database" />
<property name="username" value="root" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>


然后通过SqlSessionFactoryBuilder读取XML获取SqlSessionFactory对象

java

String resource = "org/llp/project/config/sqlMapConfig.xml";

Reader reader=Resources.getResourceAsReader(resource);

SqlSessionFactory   sqlMapper=(SqlSessionFactory) new SqlSessionFactoryBuilder().build(reader);


在使用XML的时候遇到一个问题?没有提示!没有提示对一个不熟悉MyBatis的新手来说简直是一个灾难,所以我们先把提示整出来。

解决方法:http://jingyan.baidu.com/article/e9fb46e19da1117521f766d3.html

DTD效验文件下载地址:http://download.csdn.net/download/zhanxun/8574033

第二种:另一种是JAVA代码的注解

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new
JdbcTransactionFactory();
Environment environment =
new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(configuration);


但是通常都是采用第一种获取比较明朗和简单,因为经常获取撒sqlSessionFactory所以我们把sqlSessionFactory获取简单的封装下:

package org.llp.project.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
private final static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
System.out.println(e.getMessage());

}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}

public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}


获取了sqlSessionFactory我们就能通过sqlSessionFactory得到SqlSession对象操作数据库了,但是我们获取的数据返回的结果需要存放在JavaBean中所以下面我们把数据库返回的数据与我们的JavaBean做映射。在model包下建立一个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="UserBean">
<!--把数据库返回的值与JAVa属性映射-->
<resultMap id="userResultMap" type="UserBean">
<id property="userID" column="userId" />
<result property="userName" column="userName" />
<result property="pwd" column="password" />
</resultMap>
<!--查询SQL-->
<select id="queryUsers" resultMap="userResultMap">
select * from t_user_info;
</select>
</mapper>


做完这步后需要在sqlMapConfig.xml把注册

<configuration>
<!-- 给对象起别名,方便找到 -->
<!--添加点1-->
<typeAliases>
<typeAlias alias="UserBean" type="org.llp.project.model.UserBean"/>
</typeAliases>
<!-- environments 为环境 -->
<environments default="development">
<environment id="development">
<!-- transactionManager 事物方式 -->
<transactionManager type="JDBC"  />
<!-- dataSource 数据库配置 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/project_database" />
<property name="username" value="root" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<!-- 注册 UserMapper,只有注册后才能找到对应的映射方法-->
<!--添加点2-->
<mappers>
<mapper resource="org/llp/project/model/User.xml" />
</mappers>
</configuration>


做完这些 你就可以从数据库查询出数据了,下面我们建立一个Dao 来测试下能否查询数据

package org.llp.project.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.llp.project.model.UserBean;
import org.llp.project.util.MyBatisUtil;

public class UserDAO {

public void queryUsers(){
SqlSession session = MyBatisUtil.getSqlSessionFactory().openSession();
List<UserBean> list=session.selectList("queryUsers");
System.out.println(list.toString());
session.close();
}

public static void main(String[] args) {
UserDAO userDAO=new UserDAO();
userDAO.queryUsers();
}
}


运行结果



下面我就总结下:首先创建sqlMapConfig.xml并获取到SqlSessionFactory(),然后给对象做映射,通过SqlSessionFactory()的SqlSession获取到对应的CRUD方法调用UserMapper配置的SQL语句返回结果。执行流程为SqlSessionFactoryBuilder()打开sqlMapConfig.xml得到数据库信息-》然后得到SqlSessionFactory获取SqlSession操作数据库,SqlSession会根据Mapper中的ID去调用不同的sql语句返回成结果集。

下面附上demo和一个中文的文档

中文官方文档:http://download.csdn.net/detail/xx244488877/9752560

Demo:http://download.csdn.net/detail/xx244488877/9752563
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Mybatis学习