只需要加入 mybatis-2.2.jar 和数据库驱动包即可
java代码实现的步骤
package com.yangwei.shop.test; 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 com.yangwei.shop.entity.User; import com.yangwei.shop.util.MyBatisUtil; public class TestMybatis { /** * @param args */ public static void main(String[] args) { try { //1,创建主配置文件输入流(mybatis-config.xml) InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //2,创建SQLSessionFactory SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); //3,创建SqlSession SqlSession session = factory.openSession(); //4,调用mapper文件插入数据(mapper文件必须加入到mybatis-config.xml中) User user = new User(); user.setUsername("zhangsan"); user.setPasswd("123456"); user.setNickname("shengqishi"); user.setType(2); //参数1: mapper的namespace+具体方法的id session.insert("com.yangwei.shop.entity.User.add",user); session.commit(); session.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Mybatis工具类
package com.yangwei.shop.util; 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; public class MyBatisUtil { private static SqlSessionFactory factory; static { try { InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); factory = new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession createSession() { return factory.openSession(); } public static void closeSession(SqlSession session) { if(session!=null) session.close(); } }
有了工具类之后,操作变的简单
public static void testAdd(){ SqlSession session=null; try { User user = new User(); user.setUsername("zhangsan"); user.setPasswd("123456"); user.setNickname("shengqishi"); user.setType(2); session = MyBatisUtil.createSession(); //此时,mapper文件的namespace与类的全路径需一致 session.insert(User.class.getName()+".add", user); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ MyBatisUtil.closeSession(session); } } public static void testLoad(){ SqlSession session=null; try { session = MyBatisUtil.createSession(); //此时,mapper文件的namespace与类的全路径需一致 User u=session.selectOne(User.class.getName()+".load", 1); System.out.println(u.getNickname()); } finally{ MyBatisUtil.closeSession(session); } }
我们发现,前面的session.insert(),session.selectOne()等等,第一个参数是一个很麻烦的字符串,为了改善这个,有了基于mapper的方式
步骤1,需要写为每一个写mapper接口,例如:
package com.yangwei.shop.mapper; import com.yangwei.shop.entity.User; import java.util.List;
public interface UserMapper { //这个接口中的方法,对应于mapper.xml中的标签 public void add(User user); public void update(User user); public void delete(int id); public User load(int id); public List<User> list(); }
步骤二: mapper.xml的namespace必须是这个接口的全路径,如
<mapper namespace="com.yangwei.shop.mapper.UserMapper">
步骤三:java代码调用的时候,按照如下写法:
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.add(user);
两种方式都要知道,建议使用第一种,虽然是字符串...
下面两种方式 : "获取所有User的调用"
public static void testList(){ SqlSession session=null; try { session = MyBatisUtil.createSession(); //注意这样使用的时候,mapper.xml的namespace必须是实体类全路径 List<User> users=session.selectList(User.class.getName()+".list", null); System.out.println(users.size()); } finally{ MyBatisUtil.closeSession(session); } } public static void testListByMapper(){ SqlSession session=null; try { session = MyBatisUtil.createSession(); //注意这样使用的时候,mapper.xml的namespace必须是Mapper接口全路径 List<User> users=session.getMapper(UserMapper.class).list(); System.out.println(users.size()); } finally{ MyBatisUtil.closeSession(session); } }
最后最简洁的方式,不使用mapper.xml这样的配置文件,采用注解的形式
package com.yangwei.shop.mapper; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.yangwei.shop.entity.User; //这个接口中的方法,对应于mapper.xml中的标签 public interface UserMapper { @Insert("insert into t_user(username,password,nickname,type) values(#{username},#{password},#{nickname},#{type})") public void add(User user); @Update("update t_user set password=#{password},nickname=#{nickname},type=#{type} where id=#{id}") public void update(User user); @Delete("delete from t_user where id=#{id}") public void delete(int id); @Select("select * from t_user where id=#{id}") public User load(int id); @Select("select * from t_user") public List<User> list(); }
此时在主配置文件mybatis-config.xml中引入的是这个接口,使用class属性
<mapper class="com.yangwei.shop.mapper.UserMapper" />
最佳实践(孔老师建议):
1,创建相应的MybatisUtil工具类,完成对session的获取;
2,不使用annotation完成对sql映射;
3,建议使用基于sql访问而不要使用基于Mapper