1 基本概念
1.1 { }和${ }
{ }
表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
${ }
:表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,
${ }
:括号中只能是value。
1.2 parameterType和resultType
parameterType
:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType
:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。
1.3 selectOne和selectList
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
Expected one result (or null) to be returned by selectOne(), but found: 3 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
selectList可以查询一条或多条记录。
2 需求
实现以下功能:
-
根据用户id查询一个用户信息
-
根据用户名称模糊查询用户信息列表
-
添加用户
-
更新用户
-
删除用户
3 数据库
mysql> select * from user;
+
| id | username | birthday | sex | address |
+
| 1 | 王五 | NULL | 2 | NULL |
| 10 | Charles | 2021-10-21 | 1 | 中国 |
| 16 | 张小明 | NULL | 1 | 河南郑州 |
| 22 | 陈小明 | NULL | 1 | 河南郑州 |
| 24 | 张三丰 | NULL | 1 | 河南郑州 |
| 25 | 陈小明 | NULL | 1 | 河南郑州 |
| 26 | 王五 | NULL | NULL | NULL |
+
4 项目结构

5 导入架构

maven
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
6 新建 log4j.properties
idea:resource目录下
eclipse:新建config目录下
log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis默认使用log4j作为输出日志信息
5 新建SqlMapConfig.xml
idea:resource目录下
eclipse:新建config目录下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sqlmap/Users.xml"/>
</mappers>
</configuration>
7 po类
Po类作为mybatis进行sql映射使用,po类通常与数据库表对应,UserBean.java如下:
package net920vip.bean;
import java.util.Date;
public class UserBean {
private int id;
private String username;
private String sex;
private Date birthday;
private String address;
public UserBean() {
}
public UserBean(int id, String username, String sex, Date birthday, String address) {
this.id = id;
this.username = username;
this.sex = sex;
this.birthday = birthday;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "UserBean{" +
"id=" + id +
", username='" + username + '\'' +
", sex='" + sex + '\'' +
", birthday=" + birthday +
", address='" + address + '\'' +
'}';
}
}
8 查询
8.1 映射文件
idea:在resource目录下
eclipse:在classpath下的sqlmap目录下创建sql映射文件Users.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<select id="findUserById" parameterType="int" resultType="net920vip.bean.UserBean">
select * from user where id = #{id}
</select>
<select id="findUserByUsername" parameterType="java.lang.String" resultType="net920vip.bean.UserBean">
select * from user where username like '%${value}%'
</select>
<insert id="insertUser" parameterType="net920vip.bean.UserBean">
insert into user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
</insert>
<delete id="deleteUserById" parameterType="int">
delete from user where id = #{id}
</delete>
<update id="updateUserById" parameterType="net920vip.bean.UserBean">
update user set username=#{username},
sex=#{sex},
birthday=#{birthday},
address=#{address}
where id = #{id}
</update>
</mapper>
namespace
:命名空间,用于隔离sql语句,后面讲另一层非常重要的作用
8.2 加载映射文件
mybatis框架需要加载映射文件,将Users.xml添加在SqlMapConfig.xml,如下:(可见前面第5条)
<mappers>
<mapper resource="sqlmap/Users.xml"/>
</mappers>
8.3 测试
package test;
import net920vip.bean.UserBean;
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 java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
System.out.println("打印日志");
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
System.out.println("打印日志 结束");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserBean user = sqlSession.selectOne("test.findUserById", 10);
System.out.println(user.getUsername());
List<UserBean> list = sqlSession.selectList("test.findUserByUsername", "张");
System.out.println(list);
UserBean user2 = new UserBean(10, "Charles", "1", new Date(), "中国");
sqlSession.update("test.updateUserById",user2);
sqlSession.commit();
}
}
<h2><a id="1__0"></a>1 基本概念</h2>
<h3><a id="11____2"></a>1.1 { }和${ }</h3>
<p><code>{ }</code>表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。</p>
<p><code>${ }</code>:表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,</p>
<p><code>${ }</code>:括号中只能是value。</p>
<h3><a id="12_parameterTyperesultType_10"></a>1.2 parameterType和resultType</h3>
<p><code>parameterType</code>:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。</p>
<p><code>resultType</code>:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。</p>
<h3><a id="13_selectOneselectList_16"></a>1.3 selectOne和selectList</h3>
<p>selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:</p>
<pre><div class="hljs"><code class="lang-shell">Expected one result (or null) to be returned by selectOne(), but found: 3 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
</code></div></pre>
<p>selectList可以查询一条或多条记录。</p>
<h2><a id="2__23"></a>2 需求</h2>
<p>实现以下功能:</p>
<ul>
<li>
<p>根据用户id查询一个用户信息</p>
</li>
<li>
<p>根据用户名称模糊查询用户信息列表</p>
</li>
<li>
<p>添加用户</p>
</li>
<li>
<p>更新用户</p>
</li>
<li>
<p>删除用户</p>
</li>
</ul>
<h2><a id="3__38"></a>3 数据库</h2>
<pre><div class="hljs"><code class="lang-sql">mysql<span class="hljs-operator">></span> <span class="hljs-keyword">select</span> <span class="hljs-operator">*</span> <span class="hljs-keyword">from</span> <span class="hljs-keyword">user</span>;
<span class="hljs-operator">+</span><span class="hljs-comment">----+----------+------------+------+----------+</span>
<span class="hljs-operator">|</span> id <span class="hljs-operator">|</span> username <span class="hljs-operator">|</span> birthday <span class="hljs-operator">|</span> sex <span class="hljs-operator">|</span> address <span class="hljs-operator">|</span>
<span class="hljs-operator">+</span><span class="hljs-comment">----+----------+------------+------+----------+</span>
<span class="hljs-operator">|</span> <span class="hljs-number">1</span> <span class="hljs-operator">|</span> 王五 <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span> <span class="hljs-number">2</span> <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span>
<span class="hljs-operator">|</span> <span class="hljs-number">10</span> <span class="hljs-operator">|</span> Charles <span class="hljs-operator">|</span> <span class="hljs-number">2021</span><span class="hljs-number">-10</span><span class="hljs-number">-21</span> <span class="hljs-operator">|</span> <span class="hljs-number">1</span> <span class="hljs-operator">|</span> 中国 <span class="hljs-operator">|</span>
<span class="hljs-operator">|</span> <span class="hljs-number">16</span> <span class="hljs-operator">|</span> 张小明 <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span> <span class="hljs-number">1</span> <span class="hljs-operator">|</span> 河南郑州 <span class="hljs-operator">|</span>
<span class="hljs-operator">|</span> <span class="hljs-number">22</span> <span class="hljs-operator">|</span> 陈小明 <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span> <span class="hljs-number">1</span> <span class="hljs-operator">|</span> 河南郑州 <span class="hljs-operator">|</span>
<span class="hljs-operator">|</span> <span class="hljs-number">24</span> <span class="hljs-operator">|</span> 张三丰 <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span> <span class="hljs-number">1</span> <span class="hljs-operator">|</span> 河南郑州 <span class="hljs-operator">|</span>
<span class="hljs-operator">|</span> <span class="hljs-number">25</span> <span class="hljs-operator">|</span> 陈小明 <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span> <span class="hljs-number">1</span> <span class="hljs-operator">|</span> 河南郑州 <span class="hljs-operator">|</span>
<span class="hljs-operator">|</span> <span class="hljs-number">26</span> <span class="hljs-operator">|</span> 王五 <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span> <span class="hljs-keyword">NULL</span> <span class="hljs-operator">|</span>
<span class="hljs-operator">+</span><span class="hljs-comment">----+----------+------------+------+----------+</span>
</code></div></pre>
<h2><a id="4__55"></a>4 项目结构</h2>
<p><img src="https://static.couragesteak.com/article/0a15e37f5392b73721febca1c95ee772.png" alt="MyBatis项目结构" /></p>
<h2><a id="5__60"></a>5 导入架构</h2>
<p><img src="https://static.couragesteak.com/article/41058794187d97c089e1b00445b22afd.png" alt="导入架构" /></p>
<p>maven</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-tag"><<span class="hljs-name">dependencies</span>></span>
<span class="hljs-comment"><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>mysql<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>mysql-connector-java<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>5.1.8<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-comment"><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.mybatis<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>mybatis<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>3.2.7<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-comment"><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.apache.logging.log4j<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>log4j-core<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>2.0<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependencies</span>></span>
</code></div></pre>
<h2><a id="6__log4jproperties_91"></a>6 新建 log4j.properties</h2>
<p>idea:resource目录下</p>
<p>eclipse:新建config目录下</p>
<p>log4j.properties</p>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">Global logging configuration</span>
log4j.rootLogger=DEBUG, stdout
<span class="hljs-meta"># </span><span class="language-bash">Console output...</span>
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
</code></div></pre>
<p>mybatis默认使用log4j作为输出日志信息</p>
<h2><a id="5_SqlMapConfigxml_108"></a>5 新建SqlMapConfig.xml</h2>
<p>idea:resource目录下</p>
<p>eclipse:新建config目录下</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-meta"><?xml version="1.0" encoding="UTF-8" ?></span>
<span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">configuration</span>
<span class="hljs-keyword">PUBLIC</span> <span class="hljs-string">"-//mybatis.org//DTD Config 3.0//EN"</span>
<span class="hljs-string">"http://mybatis.org/dtd/mybatis-3-config.dtd"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">configuration</span>></span>
<span class="hljs-comment"><!-- 和spring整合后 environments配置将废除--></span>
<span class="hljs-tag"><<span class="hljs-name">environments</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"development"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">environment</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"development"</span>></span>
<span class="hljs-comment"><!-- 使用jdbc事务管理--></span>
<span class="hljs-tag"><<span class="hljs-name">transactionManager</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"JDBC"</span> /></span>
<span class="hljs-comment"><!-- 数据库连接池--></span>
<span class="hljs-tag"><<span class="hljs-name">dataSource</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"POOLED"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"driver"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"com.mysql.jdbc.Driver"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"url"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"username"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"root"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"root"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">dataSource</span>></span>
<span class="hljs-tag"></<span class="hljs-name">environment</span>></span>
<span class="hljs-tag"></<span class="hljs-name">environments</span>></span>
<span class="hljs-tag"><<span class="hljs-name">mappers</span>></span>
<span class="hljs-tag"><<span class="hljs-name">mapper</span> <span class="hljs-attr">resource</span>=<span class="hljs-string">"sqlmap/Users.xml"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">mappers</span>></span>
<span class="hljs-tag"></<span class="hljs-name">configuration</span>></span>
</code></div></pre>
<h2><a id="7_po_142"></a>7 po类</h2>
<p>Po类作为mybatis进行sql映射使用,po类通常与数据库表对应,UserBean.java如下:</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> net920vip.bean;
<span class="hljs-keyword">import</span> java.util.Date;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">UserBean</span> {
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> id;
<span class="hljs-keyword">private</span> String username; <span class="hljs-comment">// 用户姓名</span>
<span class="hljs-keyword">private</span> String sex; <span class="hljs-comment">// 性别</span>
<span class="hljs-keyword">private</span> Date birthday; <span class="hljs-comment">// 生日</span>
<span class="hljs-keyword">private</span> String address; <span class="hljs-comment">// 地址</span>
<span class="hljs-keyword">public</span> <span class="hljs-title function_">UserBean</span><span class="hljs-params">()</span> {
}
<span class="hljs-keyword">public</span> <span class="hljs-title function_">UserBean</span><span class="hljs-params">(<span class="hljs-type">int</span> id, String username, String sex, Date birthday, String address)</span> {
<span class="hljs-built_in">this</span>.id = id;
<span class="hljs-built_in">this</span>.username = username;
<span class="hljs-built_in">this</span>.sex = sex;
<span class="hljs-built_in">this</span>.birthday = birthday;
<span class="hljs-built_in">this</span>.address = address;
}
<span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">getId</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> id;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setId</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span> {
<span class="hljs-built_in">this</span>.id = id;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getUsername</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> username;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setUsername</span><span class="hljs-params">(String username)</span> {
<span class="hljs-built_in">this</span>.username = username;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getSex</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> sex;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setSex</span><span class="hljs-params">(String sex)</span> {
<span class="hljs-built_in">this</span>.sex = sex;
}
<span class="hljs-keyword">public</span> Date <span class="hljs-title function_">getBirthday</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> birthday;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setBirthday</span><span class="hljs-params">(Date birthday)</span> {
<span class="hljs-built_in">this</span>.birthday = birthday;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getAddress</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> address;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setAddress</span><span class="hljs-params">(String address)</span> {
<span class="hljs-built_in">this</span>.address = address;
}
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">toString</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> <span class="hljs-string">"UserBean{"</span> +
<span class="hljs-string">"id="</span> + id +
<span class="hljs-string">", username='"</span> + username + <span class="hljs-string">'\''</span> +
<span class="hljs-string">", sex='"</span> + sex + <span class="hljs-string">'\''</span> +
<span class="hljs-string">", birthday="</span> + birthday +
<span class="hljs-string">", address='"</span> + address + <span class="hljs-string">'\''</span> +
<span class="hljs-string">'}'</span>;
}
}
</code></div></pre>
<h2><a id="8__223"></a>8 查询</h2>
<h3><a id="81__225"></a>8.1 映射文件</h3>
<p>idea:在resource目录下</p>
<p>eclipse:在classpath下的sqlmap目录下创建sql映射文件Users.xml</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-meta"><?xml version="1.0" encoding="UTF-8" ?></span>
<span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">mapper</span>
<span class="hljs-keyword">PUBLIC</span> <span class="hljs-string">"-//mybatis.org//DTD Mapper 3.0//EN"</span>
<span class="hljs-string">"http://mybatis.org/dtd/mybatis-3-mapper.dtd"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">mapper</span> <span class="hljs-attr">namespace</span>=<span class="hljs-string">"test"</span>></span>
<span class="hljs-comment"><!-- 根据id查询user --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"findUserById"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"int"</span> <span class="hljs-attr">resultType</span>=<span class="hljs-string">"net920vip.bean.UserBean"</span>></span>
select * from user where id = #{id}
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
<span class="hljs-comment"><!-- 根据用户名模糊查询 --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"findUserByUsername"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"java.lang.String"</span> <span class="hljs-attr">resultType</span>=<span class="hljs-string">"net920vip.bean.UserBean"</span>></span>
select * from user where username like '%${value}%'
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
<span class="hljs-comment"><!-- 新增用户 --></span>
<span class="hljs-tag"><<span class="hljs-name">insert</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"insertUser"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"net920vip.bean.UserBean"</span>></span>
insert into user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
<span class="hljs-tag"></<span class="hljs-name">insert</span>></span>
<span class="hljs-comment"><!-- 删除用户 --></span>
<span class="hljs-tag"><<span class="hljs-name">delete</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"deleteUserById"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"int"</span>></span>
delete from user where id = #{id}
<span class="hljs-tag"></<span class="hljs-name">delete</span>></span>
<span class="hljs-comment"><!-- 修改用户 --></span>
<span class="hljs-tag"><<span class="hljs-name">update</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"updateUserById"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"net920vip.bean.UserBean"</span>></span>
update user set username=#{username},
sex=#{sex},
birthday=#{birthday},
address=#{address}
where id = #{id}
<span class="hljs-tag"></<span class="hljs-name">update</span>></span>
<span class="hljs-tag"></<span class="hljs-name">mapper</span>></span>
</code></div></pre>
<p><code>namespace</code>:命名空间,用于隔离sql语句,后面讲另一层非常重要的作用</p>
<h3><a id="82__270"></a>8.2 加载映射文件</h3>
<p>mybatis框架需要加载映射文件,将Users.xml添加在SqlMapConfig.xml,如下:(可见前面第5条)</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-tag"><<span class="hljs-name">mappers</span>></span>
<span class="hljs-tag"><<span class="hljs-name">mapper</span> <span class="hljs-attr">resource</span>=<span class="hljs-string">"sqlmap/Users.xml"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">mappers</span>></span>
</code></div></pre>
<h3><a id="83__278"></a>8.3 测试</h3>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> test;
<span class="hljs-keyword">import</span> net920vip.bean.UserBean;
<span class="hljs-keyword">import</span> org.apache.ibatis.io.Resources;
<span class="hljs-keyword">import</span> org.apache.ibatis.session.SqlSession;
<span class="hljs-keyword">import</span> org.apache.ibatis.session.SqlSessionFactory;
<span class="hljs-keyword">import</span> org.apache.ibatis.session.SqlSessionFactoryBuilder;
<span class="hljs-keyword">import</span> java.io.IOException;
<span class="hljs-keyword">import</span> java.io.InputStream;
<span class="hljs-keyword">import</span> java.util.Date;
<span class="hljs-keyword">import</span> java.util.List;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">Test</span> {
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> <span class="hljs-keyword">throws</span> IOException {
<span class="hljs-comment">// 配置文件</span>
System.out.println(<span class="hljs-string">"打印日志"</span>);
<span class="hljs-type">String</span> <span class="hljs-variable">resource</span> <span class="hljs-operator">=</span> <span class="hljs-string">"SqlMapConfig.xml"</span>;
<span class="hljs-type">InputStream</span> <span class="hljs-variable">inputStream</span> <span class="hljs-operator">=</span> Resources.getResourceAsStream(resource);
System.out.println(<span class="hljs-string">"打印日志 结束"</span>);
<span class="hljs-comment">// 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory</span>
<span class="hljs-type">SqlSessionFactory</span> <span class="hljs-variable">sqlSessionFactory</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">SqlSessionFactoryBuilder</span>().build(inputStream);
<span class="hljs-comment">// 创建数据库会话实例sqlSession</span>
<span class="hljs-type">SqlSession</span> <span class="hljs-variable">sqlSession</span> <span class="hljs-operator">=</span> sqlSessionFactory.openSession();
<span class="hljs-comment">// 查询单个记录,根据用户id查询用户信息</span>
<span class="hljs-type">UserBean</span> <span class="hljs-variable">user</span> <span class="hljs-operator">=</span> sqlSession.selectOne(<span class="hljs-string">"test.findUserById"</span>, <span class="hljs-number">10</span>);
System.out.println(user.getUsername());
<span class="hljs-comment">// 根据用户名模糊查询</span>
List<UserBean> list = sqlSession.selectList(<span class="hljs-string">"test.findUserByUsername"</span>, <span class="hljs-string">"张"</span>);
System.out.println(list);
<span class="hljs-comment">// 新增user</span>
<span class="hljs-comment">// UserBean user1 = new UserBean();</span>
<span class="hljs-comment">// user1.setUsername("66");</span>
<span class="hljs-comment">//// user1.setBirthday("");</span>
<span class="hljs-comment">// user1.setSex("1");</span>
<span class="hljs-comment">// user1.setAddress("中国");</span>
<span class="hljs-comment">// sqlSession.insert("test.insertUser",user1);</span>
<span class="hljs-comment">// 删除</span>
<span class="hljs-comment">// sqlSession.delete("test.deleteUserById",27);</span>
<span class="hljs-comment">//// 提交事务</span>
<span class="hljs-comment">// sqlSession.commit();</span>
<span class="hljs-comment">// 修改</span>
<span class="hljs-type">UserBean</span> <span class="hljs-variable">user2</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">UserBean</span>(<span class="hljs-number">10</span>, <span class="hljs-string">"Charles"</span>, <span class="hljs-string">"1"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>(), <span class="hljs-string">"中国"</span>);
sqlSession.update(<span class="hljs-string">"test.updateUserById"</span>,user2);
<span class="hljs-comment">// 提交事务</span>
sqlSession.commit();
}
}
</code></div></pre>
留言