Mybatis框架原理简单示例

时间:2022-11-28 05:12:51

Mybatis框架原理简单示例

代码示例:

Step1. 创建一个普通java工程

Mybatis框架原理简单示例

Step2. 配置sqlMapConfig.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configyration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">


<configyration>
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理, 事务控制由mybatis进行管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis进行管理 -->
<dataSource type="POOLED">
<property name="driver" value="驱动"/>
<property name="url" value="数据库地址"/>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>

<!-- 加载映射文件 -->
<mappers>
<mapper resource="sqlmap/EbizCode.xml" />
</mappers>

</configyration>

Step2.2. 配置映射文件

注:整合ssm框架后可自动生成基本功能,部分特殊查询需自己进行编写
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">


<!--
命名空间,作用是对sql进行分类管理,理解sql隔离
注意:使用mapper代理方法开发,namesapce有特殊重要的作用
-->

<mapper namespace="ebizCode">

<!-- 配置sql语句 -->
<!--
通过selct执行数据库查询

id:标识映射文件中的sql,称为statement的id

将sql语句封装到mapperdstatement对象中

#{} 表示一个占位符号

parameterType 指定输入参数的类型

#{codeType} 其中codeType表示输入的参数,参数名称就是id,若输入参数为简单类型, #{}中参数名可以任意,可以value或其它名称

resultType:指定sql输出结果的映射的java对象类型,select指定resultType表示将单条记录(画重点)映射成java对象
-->


<select id="getEbizCodeByType" parameterType="String" resultType="com.zyl.mybatis.demo.pojo.EbizCode">
select * from ebiz_code c where c.code_type= #{codeType}
</select>

<!-- 根据用户名模糊查询,可能返回多条 -->
<!-- (画重点)resultType:指定就是单条记所映射的java对象类型 -->
<!-- ${}表示拼接sql串,将接收到的参数不加任何修饰拼接在sql中(容易造成sql注入)
${value}表示输入参数的内容,若传入类型是简单类型,${}中只能传value
-->

<select id="getEbizCodeByName" parameterType="String" resultType="com.zyl.mybatis.demo.pojo.EbizCode">
select * from ebiz_code c where c.code_type like '%#{value}%'
</select>

</mapper>

Step2.3. 配置POJO

/**
* pojo
* @author suk1M
* 随便写的就不加注释了,然而不加注释不是一个好习惯
*/

public class EbizCode {

private BigDecimal id;

private String codeType;

private String code;

private String codeLabel;

private BigDecimal showOrder;

private String parentCode;

private Date createdDate;

private Date modifiedDate;

private String createdUser;

private String modifiedUser;

private Short isDelete;

private String standByFlag1;

private String standByFlag2;

private String standByFlag3;

private String standByFlag4;

private String standByFlag5;

public BigDecimal getId() {
return id;
}

public void setId(BigDecimal id) {
this.id = id;
}

public String getCodeType() {
return codeType;
}

public void setCodeType(String codeType) {
this.codeType = codeType == null ? null : codeType.trim();
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code == null ? null : code.trim();
}

public String getCodeLabel() {
return codeLabel;
}

public void setCodeLabel(String codeLabel) {
this.codeLabel = codeLabel == null ? null : codeLabel.trim();
}

public BigDecimal getShowOrder() {
return showOrder;
}

public void setShowOrder(BigDecimal showOrder) {
this.showOrder = showOrder;
}

public String getParentCode() {
return parentCode;
}

public void setParentCode(String parentCode) {
this.parentCode = parentCode == null ? null : parentCode.trim();
}

public Date getCreatedDate() {
return createdDate;
}

public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}

public Date getModifiedDate() {
return modifiedDate;
}

public void setModifiedDate(Date modifiedDate) {
this.modifiedDate = modifiedDate;
}

public String getCreatedUser() {
return createdUser;
}

public void setCreatedUser(String createdUser) {
this.createdUser = createdUser == null ? null : createdUser.trim();
}

public String getModifiedUser() {
return modifiedUser;
}

public void setModifiedUser(String modifiedUser) {
this.modifiedUser = modifiedUser == null ? null : modifiedUser.trim();
}

public Short getIsDelete() {
return isDelete;
}

public void setIsDelete(Short isDelete) {
this.isDelete = isDelete;
}

public String getStandByFlag1() {
return standByFlag1;
}

public void setStandByFlag1(String standByFlag1) {
this.standByFlag1 = standByFlag1 == null ? null : standByFlag1.trim();
}

public String getStandByFlag2() {
return standByFlag2;
}

public void setStandByFlag2(String standByFlag2) {
this.standByFlag2 = standByFlag2 == null ? null : standByFlag2.trim();
}

public String getStandByFlag3() {
return standByFlag3;
}

public void setStandByFlag3(String standByFlag3) {
this.standByFlag3 = standByFlag3 == null ? null : standByFlag3.trim();
}

public String getStandByFlag4() {
return standByFlag4;
}

public void setStandByFlag4(String standByFlag4) {
this.standByFlag4 = standByFlag4 == null ? null : standByFlag4.trim();
}

public String getStandByFlag5() {
return standByFlag5;
}

public void setStandByFlag5(String standByFlag5) {
this.standByFlag5 = standByFlag5 == null ? null : standByFlag5.trim();
}
}

Step3. 编写demo示例

/**
* testDemo
* @author suk1M
*
*/

public class MybatisDemo {

public static void main(String[] args) throws IOException {
// mybatis 配置文件
String resource = "sqlMapConfig.xml";

// 读取配置文件,得到sql配置文件流
InputStream is = Resources.getResourceAsStream(resource);

// 创建会话工厂,传入mybatis配置信息
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

// 通过工厂得到SqlSession
SqlSession ss = ssf.openSession();

// 通过工厂得到SqlSession操作数据库
// 第一个参数:statement的id,等于namespace + "." + statement的id
// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
// ss.selectOne结果是与映射文件中所匹配的resultType类型的对象
EbizCode ec = ss.selectOne("ebizCode.getEbizCodeByType", "firstChannel");


System.out.println(ec);

ss.close();

}

}