1.虽然不想说一些闲话,但是我还是觉得有些必要,关于思维的思考。
最近在学习Mybatis的时候,我发现我一直都仅仅把Mybatis框架看作是一个技术的框架,一个工具,也跟hibernate联系的学习了起来,虽然收获颇丰,但是总觉得好像在
兜圈子,深深的想了下,发现这样的理解可能是对的,但是我觉得这样好像会使自己的思维固定,所以我又认真的想了想,有没有更好的方法呢?后面我发现用对象的思想的理
解好了很多,因为万物都是对象吗,我们可以把我们用到的一些框架当作是一个个的对象来理解,不知道这样会不会更好理解一点呢?
我觉得框架拥有对象应该有的一切属性。
2.自从有了这个思维,我就开始的去想,去验证,到底是不是这样:
首先我们创建对象的步骤是不是这样的:
(1)创建一个高度抽象的对象,其实就是我们常用的类
(2)在使用我们创建的对象的时候,用new关键字来创建对象
(3)接着就是调用对象里面的方法。
然后我们看看使用框架的使用的步骤:
(1)肯定要导入jar包,java中省略是因为本身就由很多的jar
(2)肯定是导入一些配置文件,然后再去修改配置达到我们的目的。(类比了一下,我觉得这就是我们创建类的过程)
(3)毫无疑问,就是创建使用的对象了,就是读取xml文档等,获得对象
(4)也是调用它提供给我们的方法
这样看来是不是感觉有点的相似呢?
接着,我们每一次主动的去配置文件,是不是就是相当于给我们的类去添加方法,无非就是方法的名,传入的参数,返回值的类型等,不过每个框架都有自己的原则规范。
我觉得自从我这样理解,我就感觉框架我就会了一半了,当然这是夸张的说法,毕竟框架要考虑的东西还有很多,但对于我们去使用,应该不成问题。
所以在理解上,框架就是一个对象。
3.下面我们就通过一个例子来玩转Mybatis框架的基本使用;
3.1首先应用它做一个查询的操作:
跟上面说的框架的使用步骤一样:
我们就跳过(1)(2)步骤,直接从第三个步骤开始:
(3)配置mybatis-config.xml文件跟UserMapper.xml文件,如下图所示(不懂得可以参照我的上一篇文章,或许你会有点感悟Mybatis学习)
mybatis-config.xml文件(这个就是相当于我们创建的基本类,通过mappers标签引入嵌入类)
<?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/mybatis_db" />
<property name="username" value="root" />
<property name="password" value="yqy" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/zqu/mybatis/dao/pojo/User.xml" />
</mappers>
</configuration>
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.zqu.mybatis.dao.pojo.UserMapper">
<select id="GetUserByID" parameterType="int" resultType="User">
select uname as "uname",upwd as "upasword" from `user` where uid = #{uid}
</select>
</mapper>
一个mapper就相当于一个嵌入类,select标签就是一个方法的类型,还有insert,update,delete等,其实就是
相当于平常对象里面的void,String,int等类型,id = 方法名 ,parameterType = 参数,resultType = 返回类型
毫无疑问下面的sql语句就是我们的定义一个方法的过程,在Mybatis用OGNL的方法接受参数,就是#{},用${}也行,但是线程不安全,pojo类的难以处理,建议用#{}
这样是不是就感觉简单了很多,我知道很多人也有这种的感觉
(4)创建一个POJO类java的普通对象User
package com.zqu.mybatis.dao.pojo;
public class User {
private int uid;
private String uname;
private String upasword;
public User() {
// TODO Auto-generated constructor stub
}
public User(int uid, String uname, String upasword) {
super();
this.uid = uid;
this.uname = uname;
this.upasword = upasword;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpasword() {
return upasword;
}
public void setUpasword(String upasword) {
this.upasword = upasword;
}
}
(5)我们就要去使用了,装备都已经装好了,现在上战场把:
package com.zqu.mybatis.dao.pojo;
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;
public class HelloWorld {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("Config.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 session = sqlSessionFactory.openSession();
try {
String statement = "com.zqu.mybatis.dao.pojo.UserMapper.GetUserByID";
User user = (User) session.selectOne(
statement, 2);
if(user!=null){
String userInfo = "名字:"+user.getUname()+", 密码::"+user.getUpasword();
System.out.println(userInfo);
}
} finally {
session.close();
}
}
}
结果显示:
名字:剑魔, 密码::12345631
文章就写到这里啦,有什么不对的地方,希望多多谅解,留言让我改正,学习,谢谢。