导入jar包
创建mybatis的核心(全局)配置文件,并配置
创建映射文件,并配置
创建mapper接口,实现两个绑定
获取mybatis操作数据库的会话对象sql
测试
首先获取sqlsessionfactory对象
//mybatis使用的第一步,获取sqlsessionfactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
获取sqlsession
//既然有了sqlsessionfactory,顾名思义,我们就可以从中获得sqlsession中的实例了 //sqlsession完全包含了面向数据库执行sql命令所需得所有方法。 public static SqlSession getSqlSession(){ SqlSession sqlSession =sqlSessionFactory.openSession(); return sqlSession; }
写测试方法测试
@Test public void selectAll(){ // 第一步首先获取sqlsession对象 SqlSession sqlSession= MybatisUtils.getSqlSession(); // 执行sql UserMapper userMapper=sqlSession.getMapper(UserMapper.class); List<User> userList= userMapper.getUserList(); for (User user:userList) { System.out.println(user.toString()); } // 关闭链接 sqlSession.close(); }
搭建过程
导入jar包
有段mysql,dbcp,mybatis,springboot
配置springboot的配置文件
spring在整合mybatis经历的步骤
创建数据源对象 BasicDataSource 注入连接相关参数
创建SQLSessionFactory,注入数据源对象,mapper文件所在的位置,起别名
#起别名 mybatis.type-aliases-package=com.as.pojo #配置文件的位置 mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
创建Dao,MapperScannerConfiger,注入dao接口所在的包
application.properties文件配置如下代码
spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://localhost:3306/as?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #整合mybatis mybatis.type-aliases-package=com.as.pojo mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
开发步骤
当mybatis实现多表联查时候,xml配置文件的编写如下面配置
<select id="selStu" resultMap="stuMap"> select * from student </select> <resultMap id="stuMap" type="student"> <!--主键使用id标签配置映射关系,其余使用result标签配置映射关系--> <id property="id" column="id"></id> <result property="name" column="name"></result> <result property="age" column="age"></result> <result property="tid" column="tid"></result> <!--如果关联一个对象,使用association,关联集合,则是使用collection--> <association property="teacher" select="com.mapper.StuMapper.selById" column="tid"></association> </resultMap> <select id="selById" resultMap="teacher" parameterType="int"> select * from teacher where id=#{0} </select>
需要注意的有两点:
在主键配置的时候用id标签,其他的使用result标签配置,外键也用result
外键如果关联的是一个对像,要使用association标签,如果关联的是一个集合那么使用的标签就是collection。
assocication:标签
collection:收集
result标签中property值得是实体类中的字段 ,column的值值得是数据库中的字段。
<resultMap type="Student" id="stuMap1"> <id column="sid" property="id"/> <result column="sname" property="name"/> <result column="age" property="age"/> <result column="tid" property="tid"/> <association property="teacher" javaType="Teacher"> <id column="tid" property="id"/> <result column="tname" property="name"/> </association> </resultMap> <select id="selAll1" resultMap="stuMap1"> select s.id sid,s.name sname,age age,t.id tid,t.name tname FROM student s left outer join teacher t on s.tid=t.id </select>
两表联查的xml中sql的配置如上面的代码。
<select id="selByTid" parameterType="int" resultType="student"> select * from student where tid=#{0} </select> <resultMap type="teacher" id="mymap"> <id column="id" property="id"/> <result column="name" property="name"/> <collection property="list" select="com.mapper.StudentMapper.selByTid" column="id"></collection> </resultMap> <select id="selAll" resultMap="mymap"> select * from teacher </select>
<resultMap type="teacher" id="mymap1"> <id column="tid" property="id"/> <result column="tname" property="name"/> <collection property="list" ofType="student"> <id column="sid" property="id"/> <result column="sname" property="name"/> <result column="age" property="age"/> <result column="tid" property="tid"/> </collection> </resultMap> <select id="selAll1" resultMap="mymap1"> select t.id tid,t.name tname,s.id sid,s.name sname,age,tid from teacher t LEFT JOIN student s on t.id=s.tid </select>
<select id="selAll" resultMap="teacher"> select t.id `teacher.id` t.name `teacher.name`,s.id id,s.name name,age,tid from student s left join teacher t on t.id=s.id </select>
@Param的作用
@Param:用来bai在DAO层中声明参数。例:
List selectByUserIdAndOffset(@duParam(“userId”) int userId, @Param(“offset”) int offset, @Param(“limit”) int limit);
java中@表示注解,解释一个方法,类,zhi属性的作用dao