mybatis极大的简化了jdbc的操作,使更方便的操作数据库。
项目结构及配置文件用maven创建标准的javaweb项目结构。
在src下的java目录创建名为mapper的软件包(这里使用mapper代码开发)即为数据库表到数据对象的映射(ORM模型),用于放置映射的类。
在src下的resource目录下同样也创建mapper目录,用于放置映射类的配置文件。(使配置文件和映射类在编译后位于同一目录下)
如上图两个映射类对应数据库表的两个表
xml的文件内容为
select * from tb_user;
要注意的三点使namespace,用mapper代理不能随便命名,要用映射类所在路径命名,如UserMapper类在mapper下,所以命名为mapper.UserMapper,resultType是返回的数据类型,为javabean的类。其他的映射类道理相同。
映射类的内容如下:
package mapper;
import pojo.User;
import java.util.List;
public interface UserMapper {
List selectAll();
}
要注意的有三点,默认的修饰词使public、注意返回值的数据类型、查询的一行的数据类型使一个list元素、selectAll()是配置文件的id,同时也是一个方法调用xml中配置的sql语句。其他的映射类也是如此。
还要创建pojo的软件包用于编写,两个数据库表的javabean对象。其就是标准的javabean。
最后就是配置mybatis-config.xml可以看我之前的文章。要注意的最后的mappers标签要加载所有的映射对象的xml配置文件(注意路径在mapper下)。放在resources中和mapper同级。
还有就是pom.xml看之前的文章。
mybatis增加数据在对应的映射对象的配置文件xml中写入,标签和sql的语法一致。
insert into tb_brand(brand_name,company_name,ordered,description,status)
values (#{brand_name},#{company_name},#{ordered},#{description},#{status})
#{}是占位符用于替换参数,参数来源于addOneColumn方法。其在映射类中和 List selectAll()在同一接口中;,如下
void addoneColumn(Brand brand); //数据库添加一行数据mybatis删除数据
xml的配置
delete from tb_brand where id=#{id}
映射类的方法
//删除操作
void deleteById(int id);
mybatis查找数据
//根据id查询
List selectById(int id);
mybatis修改数据
update tb_brand
set
brand_name=#{brand_name},
company_name=#{company_name},
ordered=#{ordered},
description=#{description},
status=#{status}
where id=#{id}
//修改操作
void updateOne(Brand brand);
对于上面的操作要实现针对某个字段而不是全部需要适应mybatis提供的内置标签代替关键字,如修改是只对某个字段修改其他不变:
update tb_brand
brand_name=#{brand_name},
company_name=#{company_name},
ordered=#{ordered},
description=#{description},
status=#{status}
where id=#{id}
用标签替换了原本的set关键字,用标签进行判断选择要修改的字段。详情可见mybatis官网:mybatis动态sql
调用增删查改函数上面已经编辑和配置好了函数和文件,接下来编写测试类MybatisDemo
package mybatis;
import mapper.UserMapper;
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 pojo.User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisDemo {
public static void main(String[] args) throws IOException{
//从 XML 文件中构建 SqlSessionFactory 的实例
String resource = "mybatis-config.xml";
InputStream inputStream = null;
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//从 SqlSessionFactory 中获取 SqlSession
SqlSession session = sqlSessionFactory.openSession();
//执行sql
//List users=session.selectList("test.selectAll");
//System.out.println(users);
//后者不用直接执行sql而使用mapper代理开发
//获取UserMapper接口的代理对象
UserMapper userMapper=session.getMapper(UserMapper.class); //获取映射对象的类
List users=userMapper.selectAll(); //调用对象方法
System.out.println(users);
//释放资源
session.close();
}
}
要注意的增删改的操作要提交:session.commit();
mybatis的参数传递:
多个不同类型的参数:将参数封装为map集合,并通过param注解更改key的名称,其值就是参数的值。当只有一个参数时就不用了。
POJO的参数类型:可以直接使用,对象的属性名和参数占位符保持一致即可
Map集合 :map的键和参数占位符一致也直接使用。
array,list当数据类型都要加。
上面的都是在xml中配置sql语句通过mapper调用或通过id调用,下面时通过注解定义sql语句,注解比配置文件更简单,不用配置任何xml文件,但是注解只能完成一些简单的sql语句,复杂的任要用xml配置文件
增删改查
@Insert
@Delete
@Update
@Select
//在mapper下的类中定义注解的sql
@Select(“select * from tb_brand where id = #{id}”)
List selet_by_id(int id);
//测试类中调用:
//获取参数
int id=3;
List user1=brandMapper.selet_by_id(id);
System.out.println(user1);
list要加上泛型,<> 中间是javabean对象,由于显示不出来,上面的就都没有。



