一:加入jar包
mybatis-3.1.1.jar(mybatis核心包)
mybaits所依赖的jar包
*还有别忘了连接数据库驱动架包
*以前叫ibatis 3.0以后叫mybatis 包结构还是以ibatis命名的 包结构以后都不会改了 已经成型了 改动很大
二:创建mybatis主配置文件(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 type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 映射文件的位置 -->
<mapper resource="mym/mybatis/domain/User.xml" />
</mappers>
</configuration>
三:创建实体类USER
public class User {
private String id;
private String name;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
System.out.println("User.setId()");
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("User.setName()");
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
System.out.println("User.setPassword()");
this.password = password;
}
@Override
public String toString() {
return "id="+id+"name="+name+"password="+password+"";
}
}
*User对象重写toString()方法 如果不重写 输出的就是对象的内存地址
四:创建User.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="mym.mybatis.domain.User">
<select id="selectUserById" parameterType="string" resultType="mym.mybatis.domain.User">
select * from user where id = #{id}
</select>
<select id="selectAll" resultType="mym.mybatis.domain.User">
select * from user
</select>
</mapper>
*parameterType 此处和hibernate的映射文件一样 都是小写的string hibernate称作hibernate类型 如果这里要写java类型 必须是java.lang.String
*ibatis里传参数是这种形式 #id#
*用字符串描述一个类,肯定就是反射 实体类set方法框架用的 我们很少用到set方法
五:创建测试类MybatisTest
@Test
public void test1() throws Exception{
String resource = "sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
//User u = session.selectOne("mym.mybatis.domain.User.selectUserById", "001");
//System.out.println(u);
List<User> userList = session.selectList("mym.mybatis.domain.User.selectAll");
for(User u:userList){
System.out.println(u);
}
}
* User u = session.selectOne("mym.mybatis.domain.User.selectUserById", "001"); 采用namespace+id的方式确定调用的是哪一条sql语句 直接使用id的方式也是可以的 但是如果有两个xml文件都有这个id命名的的sql语句就会出问题 selectOne方法返回的只有一个实体类 返回多个抛异常 所以这个方法同时是通过主键来查询
*selectOne方法返回的是Object对象 但是这里不要强转 框架类部肯定做了强转处理(这个方法以后有机会看看源码怎么实现的)
*不管查询返回的结果是几个 resultType都是一个实体类
*jdbc写死在java代码里面,相当于硬编码,mybatis写在配置文件里,配置文件不参加编译,后期维护更加方便。更轻量级,更容易上手。