Mybatis
1》什么是Mybatis?
开源的持久层框架
jdbc:代码繁琐,要写sql语句 优点:性能好,直接操作数据库
hibernate框架:代码简洁,不用写sql。缺点:性能较低
Mybatis框架:代码简洁,写sql,性能还可以。容易掌握
如何使用?
1.导包
可以使用maven来对jar包进行管理,具体可以去阿里云仓库搜索。
2.添加Mybatis配置文件
生成相应的get,set和tostring。
4.写映射文件.注:修改配置文件,指定映射文件的位置
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
insert into t6
values(8,#{pwd},#{name})
update t6 set
name=#{name},pwd=#{pwd}
where id=#{id}
delete from t6 where id=#{id}
5:调用SqlSession提供的方法来访问数据库
注:实体类的属性名与表的字段表要求一样。大小写无所谓。
测试:
package test;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import entity.Emp;
import entity.Emp2;
public class TestCase {
private SqlSession ss;
@Before
public void init() {
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
ss = ssf.openSession();
}
@Test
public void test1() {
Emp emp = new Emp();
emp.setPwd("369");
emp.setName("JACK");
ss.insert("test.save", emp);
ss.commit();
ss.close();
}
@Test
public void test2() {
List
System.out.println(emps);
ss.close();
}
@Test
public void test3() {
Emp emp = ss.selectOne("test.findById", 3);
System.out.println(emp);
}
@Test
public void test4() {
Emp emp = ss.selectOne("test.findById", 3);
emp.setName("hh");
emp.setPwd("987");
ss.update("test.modify", emp);
ss.commit();
ss.close();
System.out.println(emp);
}
@Test
public void test5() {
ss.delete("test.delete", 8);
List
System.out.println(emps);
ss.commit();
ss.close();
}
@Test
public void test6() {
Map data=ss.selectOne("test.findById2",2);
System.out.println(data);
System.out.println(data.get("name"));
ss.close();
}
@Test
public void test7() {
Emp2 emp=ss.selectOne("test.findById3",2);
System.out.println(emp);
ss.close();
}
}
4>返回Map类型的结果
mybatis会将查询结果先封装到一个Map对象里面(以字段名为key,以字段值为alue)
然后再将Map对象中的数据添加到实体对象里面.
Mapper映射器
符合映射文件的接口
注:mybatis会自动实现一个符合该接口要求的对象
要求:1.接口方法的名称与映射文件中的sql的id要一样
2.方法的参数类型要与映射文件中的parameterType类型一致
3.方法的返回类型要与映射文件中的ResultType一致,无返回为void
此外,映射文件的namespace必须等于映射器的全限定名字。