- ## 浅谈MyBatis的应用
这个账号是我不久才注册的,为的当然是学习。这篇文章也是我第一次发,如果有什么不好的,请多多指教,因为我就是菜鸟。
前面当然是心灵鸡汤:谈谈自律:这里借用别人的一句话,你有多自律,你就有多自由。
自由来源于自信,自信是对事的掌控。自信来源于自律,自律是对自我的掌控。
由于项目可能要用到 ibatis ,所以我今天复习了一下mybatis的用法,这里只谈mybatis,不谈他和spring的结合应用,如果有所帮助,十分欣慰。
1什么是mybatis?
官方的说:mybatis是基于ORM(Object Relational Mapping,对象关系映射)的一个apache下的一个开源项目,他的前身是ibatis,两者相差不大(没仔细研究,听别人说的),用我的话说:它就是一个工具,一个jar包,一个用来操作数据的工具。将数据从数据库中映射到对象上–实现数据的可视化利用,或将对象映射到数据库中–保存对象的信息于数据库中。
2 它的优点(copy的):
MyBatis消除了几乎所有的 JDBC 代码 ,使用简单的XML 或注解用于配置和原始映射, 将数据库中的记录映射成 Java 的 POJOs(Plan Old Java Objects) 。
3 说了这么多,到底是咋用的呢?
说到底,他算是一个框架。
准备工作:1 当然是Java的基本编程工具
2 它所需要的基本zar包(网上随便找)
4 执行流程(可以看看,挺好的)
5 要开始了
新建一个Java项目就行,随便建一个lib包,导入或直接copy进你的基本包(记得build path)。
****a:sqlConfi配置文件,最重要的配置文件,里面有数据源的配置,和事物的控制,随便建一个资源包,或就在src目录下新建一个xml文件,名字最好带config,这样容易区别,例如shachaConfig.xml,把下面的copy进去
<!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"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/my?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="zf123"/>
</dataSource>
</environment>
</environments>
<mappers >
<mapper resource="beanMapping.xml"/>
</mappers>
</configuration>
这个应该很容易看懂,如果你了解一点jdbc知识的话。(我这个是mysql数据库)
**b:在相应的库中随便建一个demon表,插入几条数据**
CREATE TABLE usertest(
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`name` VARCHAR(40),
age INT
)
INSERT INTO usertest (`name`,age) VALUES('李四',28)
c:建一个pojo类,就是普普通通的类,让他和你刚建的表字段相对应,(要一样,一样省事)(不一样可以,不过要配置一个字段和列相对应的xml)
package beanMapping;
public class UserTest {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UserTest [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
**d:建立Mapping文件,这个文件中写你的相应sql语句的,用来增删改查。看下面:**
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="beanMapping.Testm">
<select id="seletById" parameterType="int" resultType="beanMapping.UserTest">
select * from usertest where id =#{a}
</select>
</mapper>
这里要说一下:id随便起,最好见词达意,
parameterType:输入参数类型,要和数据库一致,
resultType:返回类型,写你刚才建的那个pojo全路径(可以点进去)
#{id} :#{}这个是占位符,里面传参名称也是随便写,形式而已。(这是传了一个参,传多个呢?有好多种解决方法,自己琢磨,可以从输入类型入手)
namespace:mapper中的namespace用于绑定dao接口的,即面向接口编程。是不是说的有点官方,你可以把这个看成是,你调用增删改查的那个类名,他是唯一的,它其实就是限定了mapping.xml和你的调用增删改查类中的一些参数一一对应。
**e:新建测试类,类名就用你刚才namespace中的。**
package beanMapping;
import java.io.IOException;
import java.io.InputStream;
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.junit.Test;
public class Testm {
private static SqlSession sqlSession;
static {
//得到配置文件输入流
InputStream in=null;
try {
in = Resources.getResourceAsStream("mybatisConfig.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//利用输入文件输入流创建sqldessionfactory工厂
SqlSessionFactory sqlSessionFaction=new SqlSessionFactoryBuilder().build(in);
//利用sqlsessionFactory得到sqlSession对象
sqlSession=sqlSessionFaction.openSession();
}
@Test
public void getUser() {
UserTest user=sqlSession.selectOne("seletById", 1);
System.out.println(user);
sqlSession.close();
}
}
这个seletById就是你刚才mapping中的sql语句中的id,1是你传的参数。 这里鼠标你右键JUnit运行就行了.
运行结果;UserTest [id=1, name=张三, age=25]
好了数据已经导通了。 这里他的修改和删除,以及增加都十分类似,就不细细说了。就只是mapping中的标签不一样,sqlSession调用的方法不一样,你要是做到了,看看方法试一试,就懂了。
谢谢大家,我会继续加油。