上次我们一起学习了Spring的入门课程,它作为SSM框架的中心组织者,为所有其他业务层提供bean。这篇文章将学习Mybatis的基础用法,一共分为3步来讲解:
1.Mybatis基础配置文件;
2.xml配置sql语句,操作数据库;
3.mapper接口注入sql语句,操作数据库;
首先,来介绍下jar包:
只有3个jar包。
1.mybatis的配置如下:
<?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>
<typeAliases>
<!-- model1基本实例 -->
<typeAlias alias="User" type="com.xdy.model1.User" />
</typeAliases>
<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://127.0.0.1:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xdy/model1/User.xml" />
</mappers>
</configuration>
有了这些配置,在main方法中就可以用他们来连接数据库了,可以看到我用的mysql数据库。
2.用基本的xml配置sql语句与mapper接口的映射关系,执行数据库操作:
package com.xdy.model1;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//最基本的入门方法,用 SqlSession 实例来直接执行已映射的 SQL 语句
public class Main {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
//加载代码时执行,比构造方法执行的还早
static {
try {
//加载资源,创建sqlSessionFactory
reader = Resources.getResourceAsReader("config_mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//获取sqlsession
SqlSession session = sqlSessionFactory.openSession();
try {
//用sqlsession调用对应的mapper方法,传入参数id=1,访问数据库,返回数据封装为User
User user = (User) session.selectOne(
"com.xdy.model1.UserMapper.getUserByID", 1);
if(user!=null){
//输出从数据库访问到的数据
String userInfo = "名字:"+user.getUserName()+", id:"+user.getUserId()+", age:"+user.getUserAge();
System.out.println(userInfo);
}
} finally {
session.close();
}
}
}
以上是我的main方法,其中静态代码块加载mybatis资源,然后会获取连接数据库的sqlsession。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.xdy.model1.UserMapper">
<select id="getUserByID" parameterType="Integer" resultType="User">
select * from t_user where userId = #{id}
</select>
</mapper>
定义了一个id为getUserById的查询方法,传入类型为Integer,返回User;这样moduel1中的实例就完成了:它用最基本的配置方法完成了一次数据库访问。在以后的应用中,将采用这种配置sql的方式,来满足多变的业务需求;
3.基于mapper注解的sql语句映射方法,个人感觉这种方法在大型项目中不是很实用,但还是了解下:
package com.xdy.model2;
import org.apache.ibatis.annotations.Select;
//创建一个接口:IUser,并在其中声明对应的操作方法
public interface IUser {
@Select("select * from t_user where userId = #{id}")
public Useri getUseriByID(Integer id);
}
配置sql时,定义一个接口然后绑定方法与sql语句的映射。在main方法中这样调用:
package com.xdy.model2;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
// 用接口注解,映射sql语句
public class Main {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
//加载代码时执行,比构造方法执行的还早
static {
try {
//加载资源,创建sqlSessionFactory
reader = Resources.getResourceAsReader("config_mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
/**
* @param args
*/
public static void main(String[] args) {
//用sqlsession工厂加载接口mapper方法,不再需要在配置文档中配置mapper和typeAliases,极大提高了开发效率
sqlSessionFactory.getConfiguration().addMapper(IUser.class);
//获取session
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取接口对应的mapper
IUser iuser = sqlSession.getMapper(IUser.class);
//用User类接收返回的数据
Useri user = iuser.getUseriByID(1);
if(user!=null){
//输出从数据库访问到的数据
String userInfo = "名字:"+user.getUserName()+", id:"+user.getUserId()+", age:"+user.getUserAge();
System.out.println(userInfo);
}
}
}
这样,就调用了接口中的getUseriByID方法,然后mybatis会自动找到对应的sql语句去执行,优点是不用注册那么多xml文档,缺点就是不利于维护。
在实际应用中采用注解扫描的方式,会将问题大大简单,大家只要知道mybatis有这么两可以操作数据库的方法就好了。至于在ssm框架中怎么使用,以后再学吧~
本实例免费下载地址:
http://download.csdn.net/detail/nwpumaster/9595115