终于开始学习三大框架了,首先从MyBatis入手。上学期学过一段时间Hibernate,不过学的并不好,当时被那些表之间的一对多,多对多关系搞的晕头转向。最后期末考试还好是四个人一组做课程设计,我就抱大腿了。
今天学MyBatis,感觉比Hibernate好上手。话不多说,先来个入门级的程序练练手。我用的是最新版本,写程序需要两个jar包:
- mybatis-3.3.1.jar
- mysql-connector-java-5.1.37-bin.jar
今天主要练习的是一张表的增删改查,使用的数据库表是t_user,database是test。
数据库
CREATE TABLE t_user(
uid CHAR(32) PRIMARY KEY,
uname VARCHAR(40) NOT NULL,
upassword VARCHAR(40) NOT NULL
);
表里插入几条数据做测试:
接下来是配置文件,首先是Mybatis的配置文件:mybatisConfig.xml。文件内容如下:
Mybatis的配置文件:mybatisConfig.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="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="dongjiong" />
</dataSource>
</environment>
</environments>
</configuration>
然后是数据库表所对应的实体类:User.java
实体类:User.java
package com.mybatis.domain;
public class User {
private String uid;
private String uname;
private String upassword;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpassword() {
return upassword;
}
public void setUpassword(String upassword) {
this.upassword = upassword;
}
@Override
public String toString() {
return "User [uid=" + uid + ", uname=" + uname + ", upassword="
+ upassword + "]";
}
}
定义操作t_user表的sql映射文件userMapper.xml
映射文件userMapper.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.mybatis.mapping.userMapper">
<!--
根据id查询得到一个user对象
-->
<select id="selectUserById" parameterType="String" resultType="com.mybatis.domain.User">
select * from t_user where uid=#{id}
</select>
</mapper>
为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的。select标签表示的是执行查询语句,对应的还有insert,update,delete标签。select标签的id属性为selectUserById,id属性值必须是唯一的,不能够重复;parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型。resultType=”com.mybatis.domain.User”就表示将查询结果封装成一个User类的对象返回。
最后不要忘了在mybatisConfig.xml文件中注册userMapper.xml文件
<mappers>
<!-- 注册userMapper.xml文件 -->
<mapper resource="com/mybatis/mapping/userMapper.xml"/>
</mappers>
测试程序:
package com.mybatis.test;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.mybatis.domain.User;
public class MyBatisTest {
@Test
public void testSelectUserById(){
//mybatis的配置文件
String resource = "mybatisConfig.xml";
//得到配置文件流
InputStream is = MyBatisTest.class.getClassLoader().getResourceAsStream(resource);
//创建会话工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//通过工厂得到SqlSession
SqlSession session = sessionFactory.openSession();
/**
* 第一个参数:
* com.mybatis.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
* selectUserById是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
* 第二个参数:
* 传给SQL语句的值,即传给#{id}中的id的值
*/
User user = session.selectOne("com.mybatis.mapping.userMapper.selectUserById", "345");
System.out.println(user);
session.close();
}
}
查询结果
OK,成功!!牛刀小试到此结束。
整个工程目录如下: