Java Mybatis学习
简介(官网)
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
mybatis框架需要的jar包,mybatis-XXX.jar包和数据库驱动jar包,如Oracle数据库则需要ojdbc.jar、mysql数据库则需要mysql-connector-XX.jar包。

图1文件结构
如图1所示,Mybatis包括Java数据库实体类文件、java dao文件、xml配置文件、xml映射文件4大类文件。
其相互直接的关系如图2所示:

图2关键文件关系
以下是程序代码
配置xml文件 MyBatis-Configuration.xml:
*******************************************************************************************
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<!--数据库配置文件的声明-->
<properties resource="mysqldb.properties">
<property name="dbuser" value="test" />
<property name="dbpass" value="test" />
</properties>
<!--简写声明,声明后User与org.happymzw.pojo.User等价-->
<typeAliases>
<typeAlias alias="User" type="org.happymzw.pojo.User" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/happymv/mapper/UserMapper.xml"/>
</mappers>
</configuration>
*************************************************************************************
映射xml文件 UserMapper.java
*************************************************************************************
<?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="org.happymzw.dao.UserDao"><!--映射接口->
<insert id="insert" parameterType="User">
<![CDATA[insert into t_user values(#{id}, #{userName}, #{password}, #{description})]]>
</insert>
<delete id="delete" parameterType="String" >
<![CDATA[ delete from t_user where userName=#{userName}]]>
</delete>
<update id="update" parameterType="User">
<![CDATA[ update t_user set userName=#{userName},password=#{password},description=#{description} where id=#{id}]]>
</update>
<select id="countAll" resultType="int">
<![CDATA[ select count(1) from t_user]]>
</select>
<select id="selectAll" resultType="User">
<![CDATA[ select * from t_user]]>
</select>
<select id="findByUserName" parameterType="String" resultType="User">
<![CDATA[ select * from t_user where userName=#{userName}]]>
</select>
</mapper>
************************************************************************************
Java dao文件 UserDao.java
************************************************************************************
package org.happymzw.dao;
import java.util.List;
import org.happymzw.pojo.User;
/**
* @author victor.min
*
*/
public interface UserDao{
public int insert(User user);
public int delete(String userName);
public int update(User user);
public List<User> selectAll();
public int countAll();
public User findByUserName(String userName);
}
*********************************************************************************
Java数据库实体类
*********************************************************************************
package org.happymzw.pojo;
/**
* @author victor.min
*
*/
public class User{
private int id;
private String userName;
private String password;
private String description;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(final int id) {
this.id = id;
}
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(final String userName) {
this.userName = userName;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(final String password) {
this.password = password;
}
/**
* @return the description
*/
public String getDescription() {
return description;
}
/**
* @param description the description to set
*/
public void setDescription(final String description) {
this.description = description;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append("User [id=");
builder.append(id);
builder.append(", userName=");
builder.append(userName);
builder.append(", password=");
builder.append(password);
builder.append(", description=");
builder.append(description);
builder.append("]");
return builder.toString();
}
}
********************************************************************************
测试文件 UserDaoTest.java和TestMain.java
********************************************************************************
package org.happymzw.test;
import java.io.Reader;
import java.util.Iterator;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.happymzw.dao.UserDao;
import org.happymzw.pojo.User;
import org.junit.Test;
/**
* @author victor.min
*
*/
public class UserDaoTest {
@Test
public void userDaoTest() throws Exception {
final String resource = "MyBatis-Configuration.xml";
final Reader reader = Resources.getResourceAsReader(resource);
final SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
final SqlSessionFactory factory = builder.build(reader);
final SqlSession session = factory.openSession();
final UserDao userDao = session.getMapper(UserDao.class);
// final User user = new User();
// user.setId(7);
// user.setUserName("happymzw2");
// user.setPassword("123456");
// user.setDescription("备注");
//
// userDao.insert(user);
// System.out.println("记录条数:"+userDao.countAll());
// user.setDescription("Description");
// userDao.update(user);
// final User u1 = userDao.findByUserName("happymzw2");
// System.out.println(u1.toString());
userDao.delete("happymzw2");
System.out.println("记录条数:"+userDao.countAll());
final List<User> users = userDao.selectAll();
final Iterator<User> iter = users.iterator();
while(iter.hasNext()){
final User u = iter.next();
System.out.println("ID: " + u.getId()
+ ", 用户名:" + u.getUserName()
+ ", 密码:" + u.getPassword()
+ ", 备注: " + u.getDescription());
}
session.commit();
session.close();
}
}
*******************************************************************************************
********************************************************************************************
package org.happymzw.test;
public class TestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
UserDaoTest test = new UserDaoTest();
try {
test.userDaoTest();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
*********************************************************************************************
附:数据库配置文件
mysql数据库 mysqldb.properties
********************************************************************************************
# db config
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mybatis
db.username=admin
db.password=admin
*******************************************************************************************
Oracle数据库 oracledb.properties
*******************************************************************************************
# db config
db.driver=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@localhost:1521:test
db.username=admin
db.password=admin
*******************************************************************************************
浙公网安备 33010602011771号