mybatis的进阶指南
2018-01-15 21:40
316 查看
这一篇mybatis的进阶指南是接着上一篇mybatis的入门指南来的,先新建一个项目mybatis02,包名等都相应的改了,其他跟mybatis的入门指南一样
测试,其他的不用动,我们测试:
注意,UserMapper.xml文件的mapper节点的namespace要对于接口文件的包名+类名。
在方法上面加上select注释,需要在conf.xml加上:
或者:
测试:
上面两种方法都行,要注意的是,在接口+xml的方法中,如果把接口加入mybatis的配置中,则接口和配置文件必须得在同一个包里,xml的namespace必须对应接口文件的包名+类名,否则报错,如果把xml文件加入mybatis配置中,则接口和配置文件不一定要在同一个包里,但是xml的namespace必须对应接口文件的包名+类名。不能都加,否则也会报错。
属性名映射到列名,功能很强大,我们也可以直接:
这样要属性名跟列名一样才行。
获取session或者不传参数,开启了一个事务,之后的insert,update,delete操作都是事务中,最后要通过
来提交事务,否则不起作用。
今后有时间,写一些mybatis整合spring,springboot的博客,记录下自己的所学所思,也给其他的读者一些入门的参考。
通过接口交互数据
SqlSession通过的通用方法并强制转换的方式,容易出错,IDE不能不能提示转换类型,存在着转换安全的问题,可以采用接口+xml,和单独的接口两种方式来加以避免。接口+xml
在com.example.mybatis02.mapping包下新建一个接口文件:package com.example.mybatis02.mapping; import java.util.List; import com.example.mybatis02.domain.User; public interface UserMapper { public void insert(User user); public User selectUser(String userName); public List<User> selectAll(); }
测试,其他的不用动,我们测试:
package com.example.mybatis02; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.example.mybatis02.domain.User; import com.example.mybatis02.mapping.UserMapper; import com.example.mybatis02.mapping.UserMapper2; /** * Hello world! * */ public class App { public static void main(String[] args) { //mybatis的配置文件 String resource = "conf.xml"; //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) InputStream is = App.class.getClassLoader().getResourceAsStream(resource); //构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(true); UserMapper useMapper = session.getMapper(UserMapper.class); System.out.println(useMapper.selectUser("alex")); } }
注意,UserMapper.xml文件的mapper节点的namespace要对于接口文件的包名+类名。
纯接口
新建一个接口:package com.example.mybatis02.mapping; import java.util.List; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import com.example.mybatis02.domain.User; public interface UserMapper2 { @Insert({"insert into users(username,password,enabled) values(#{username}, #{password},#{enabled})"}) public void insert(User user); @Select({ "SELECT * FROM users WHERE username = #{username}" }) public User selectUser(String userName); @Select({ "SELECT * FROM users" }) public List<User> selectAll(); }
在方法上面加上select注释,需要在conf.xml加上:
<mapper class="com.example.mybatis02.mapping.UserMapper2" />
或者:
//构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); sessionFactory.getConfiguration().addMapper(UserMapper2.class);
测试:
package com.example.mybatis02;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.example.mybatis02.domain.User;
import com.example.mybatis02.mapping.UserMapper;
import com.example.mybatis02.mapping.UserMapper2;
/**
* Hello world!
*
*/
public class App {
public static void main(String[] args) {
//mybatis的配置文件
String resource = "conf.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = App.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); sessionFactory.getConfiguration().addMapper(UserMapper2.class);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession(true);
UserMapper2 mapper2 = session.getMapper(UserMapper2.class);
System.out.println(mapper2.selectUser("alex"));
System.out.println(mapper2.selectAll());
}
}
上面两种方法都行,要注意的是,在接口+xml的方法中,如果把接口加入mybatis的配置中,则接口和配置文件必须得在同一个包里,xml的namespace必须对应接口文件的包名+类名,否则报错,如果把xml文件加入mybatis配置中,则接口和配置文件不一定要在同一个包里,但是xml的namespace必须对应接口文件的包名+类名。不能都加,否则也会报错。
返回类型resultMap
<resultMap type="user" id="userList"><!-- type为返回列表元素的类全名或别名 --> <result column="username" property="username" /> <result column="password" property="password" /> <result column="enabled" property="enabled" /> </resultMap> <select id="selectAll" resultMap="userList"> SELECT * FROM users </select>
属性名映射到列名,功能很强大,我们也可以直接:
<select id="selectAll" resultType="user"> SELECT * FROM users </select>
这样要属性名跟列名一样才行。
参数类型parameterType
参数类型parameterType既可以是Java的基本类型,也可以自定义类型,例如:user,<insert id="insert" parameterType="user"> insert into users(username, password,enabled) values(#{username}, #{password},#{enabled}) </insert> <select id="selectUser" parameterType="String" resultType="user"> SELECT * FROM users WHERE username = #{username} </select>
事务
通过SqlSession session = sqlSessionFactory.openSession(false); // 打开会话,事务开始
获取session或者不传参数,开启了一个事务,之后的insert,update,delete操作都是事务中,最后要通过
session.commit();
来提交事务,否则不起作用。
今后有时间,写一些mybatis整合spring,springboot的博客,记录下自己的所学所思,也给其他的读者一些入门的参考。
相关文章推荐
- GIT 命令“从初学到专业”完整进阶指南
- Android 开发进阶指南
- puppet进阶指南——filebucket资源详解
- puppet进阶指南——exec资源详解
- Facebook POP 进阶指南
- 《iOS 高级编程》之Tableview进阶指南
- 跳坑指南-git进阶
- TensorFlow 教程 --进阶指南--3.10共享变量
- DSP投放进阶指南
- Facebook POP 进阶指南
- DBA入门,进阶与熟练的指南与战略
- J2EE进阶学习——Mybatis(三):Mybatis开发dao
- 开发人员进阶指南..........
- 软件测试进阶(一)A/B测试终极指南
- MyBatis3用户指南
- J2EE进阶学习——Mybatis(六):第一段总结
- 内存调教进阶指南(转帖)
- MyBatis之旅-Mybatis进阶
- mybatis进阶-5resultMap总结
- mybatis学习指南--xml文件方式篇