mybatis笔记
1.mybatis的第一个helloworld
1建数据表
使用mysql数据库
DROP TABLE IF EXISTS `tbl_employee`;
CREATE TABLE `tbl_employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(255) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tbl_employee
-- ----------------------------
INSERT INTO `tbl_employee` VALUES ('1', 'sujinran', '女', '[email protected]');
2导maven依赖包
在pom.xml中导入mybatis需要的依赖包
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
mybatis的映射文件找不到解决方法如下:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
3javaBean类
com.demo.bean.Employee 实体类
package com.demo.bean;
public class Employee {
private Integer id; //编号
private String lastName; //姓名
private String email; //邮箱
private String gender; //性别
public Employee(Integer id, String lastName, String email, String gender) {
this. id = id;
this. lastName = lastName;
this. email = email;
this. gender = gender;
}
public Employee() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this. id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this. lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this. email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this. gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", gender=" + gender + "]";
}
}
4mybatis 配置文件
mybatis-config.xml<?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>
<!--
1、 mybatis可以使用properties来引入外部properties配置文件的内容;
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
-->
<properties resource="dbconfig.properties"></properties>
<!--
2、 settings包含很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 3、 typeAliases:别名处理器:可以为我们的java类型起别名
别名不区分大小写
-->
<typeAliases>
<!-- 1、 typeAlias:为某个java类型起别名
type:指定要起别名的类型全类名;默认别名就是类名小写; employee
alias:指定新的别名
-->
<!-- <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/> -->
<!-- 2、 package:为某个包下的所有类批量起别名
name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名
(类名小写),)
-->
<package name="com.demo.bean"/>
<!-- 3、批量起别名的情况下,使用@Alias注解为某个类型指定新的别名 -->
</typeAliases>
<!--
4、 environments:环境们, mybatis可以配置多种环境 ,default指定使用某种环境。可以
达到快速切换环境。
environment:配置一个具体的环境信息;必须有两个标签; id代表当前环境的唯一标识
transactionManager:事务管理器;
type:事务管理器的类
型;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)
自定义事务管理器:实现TransactionFactory接口.type指定为全类名
dataSource:数据源;
type:数据源类型;UNPOOLED(UnpooledDataSourceFactory)
|POOLED(PooledDataSourceFactory)
|JNDI(JndiDataSourceFactory)
自定义数据源:实现DataSourceFactory接口, type是全类名
-->
<environments default="dev_mysql">
<environment id="dev_mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 5、 databaseIdProvider:支持多数据库厂商的;
type="DB_VENDOR": VendorDatabaseIdProvider
作用就是得到数据库厂商的标识(驱动getDatabaseProductName()), mybatis就能根据
数据库厂商标识来执行不同的sql;
MySQL, Oracle, SQL Server,xxxx
-->
<databaseIdProvider type="DB_VENDOR">
<!-- 为不同的数据库厂商起别名 -->
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatisconfig.xml)中 -->
<!-- 6、 mappers:将sql映射注册到全局配置中 -->
<mappers>
<!--
mapper:注册一个sql映射
注册配置文件
resource:引用类路径下的sql映射文件
mybatis/mapper/EmployeeMapper.xml
url:引用网路路径或者磁盘路径下的sql映射文件
file:///var/mappers/AuthorMapper.xml
注册接口
class:引用(注册)接口,
1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录
下;
2、没有sql映射文件,所有的sql都是利用注解写在接口上;
推荐:
比较重要的,复杂的Dao接口我们来写sql映射文件
不重要,简单的Dao接口为了开发快速可以使用注解;
-->
<!--注册xml-->
<!-- <mapper resource="mybatis/mapper/EmployeeMapper.xml"/> -->
<!--注册接口:必须接口和映射文件同名同包-->
<!-- <mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> -->
<!-- 批量注册:必须接口和映射文件同名同包 -->
<package name="com.demo.dao"/>
</mappers>
</configuration>
5数据库配置文件
dbconfig.propertiesjdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
6mapper接口及映射文件
com.demo.dao.EmployeeMapper
package com.demo.dao;
import com.demo.bean.Employee;
public interface EmployeeMapper {
public Employee getEmpById(Integer id); //查询
public Long addEmp(Employee employee); //增加
public boolean updateEmp(Employee employee); //更新
public void deleteEmpById(Integer id); //删除
}
com/demo/dao/EmployeeMapper.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="com.demo.dao.EmployeeMapper">
<!--
public Employee getEmpById(Integer id);
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
last_name lastName :起别名
-->
<select id="getEmpById" resultType="com.demo.bean.Employee">
select id,last_name,email,gender from tbl_employee where id = #{id}
</select>
<!--
public void addEmp(Employee employee);
parameterType:参数类型,可以省略,
获取自增主键的值:
mysql支持自增主键,自增主键值的获取, mybatis也是利用statement.getGenreatedKeys();
useGeneratedKeys="true";使用自增主键获取主键值策略
keyProperty;指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给
javaBean的哪个属性
-->
<insert id="addEmp" parameterType="com.demo.bean.Employee"
useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
insert into tbl_employee(last_name,email,gender)
values(#{lastName},#{email},#{gender})
</insert>
<!-- public void updateEmp(Employee employee); -->
<update id="updateEmp">
update tbl_employee
set last_name=#{lastName},email=#{email},gender=#{gender}
where id=#{id}
</update>
<!-- public void deleteEmpById(Integer id); -->
<delete id="deleteEmpById">
delete from tbl_employee where id=#{id}
</delete>
</mapper>
7测试
MyBatisTest
import com.demo.bean.Employee;
import com.demo.dao.EmployeeMapper;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行
* 环境信息
* 2、 sql映射文件;配置了每一个sql,以及sql的封装规则等。
* 3、将sql映射文件注册在全局配置文件中
* 4、写代码:
* 1)、根据全局配置文件得到SqlSessionFactory;
* 2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
* 一个sqlSession就是代表和数据库的一次会话,用完关闭
* 3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。 sql都是保存在sql映射文件中的。
*
* @throws IOException
*/
//************************************************************************************
// 查询测试
//************************************************************************************
@Test
public void test01() throws IOException {
// 1、获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
// 2、获取sqlSession对象
SqlSession openSession = sqlSessionFactory.openSession();
try {
// 3、获取接口的实现类对象
//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(mapper.getClass());
System.out.println(employee);
} finally {
openSession.close();
}
}
/**
* 测试增删改
* 1、 mybatis允许增删改直接定义以下类型返回值
* Integer、 Long、 Boolean、 void
* 2、我们需要手动提交数据
* sqlSessionFactory.openSession();===》手动提交
* sqlSessionFactory.openSession(true);===》自动提交
*
* @throws IOException
*/
//************************************************************************************
// 添加测试
//************************************************************************************
@Test
public void test02() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
/**
* 测试添加
*/
Employee employee = new Employee(null, "jerry4", null, "1");
mapper.addEmp(employee);
System.out.println(employee.getId());
//2、手动提交数据
openSession.commit();
} finally {
openSession.close();
}
}
//************************************************************************************
// 修改测试
//************************************************************************************
@Test
public void test03() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
/**
* 测试修改
*/
Employee employee = new Employee(1, "Tom", "[email protected]", "0");
boolean updateEmp = mapper.updateEmp(employee);
System.out.println(updateEmp);
//2、手动提交数据
openSession.commit();
} finally {
openSession.close();
}
}
//************************************************************************************
// 删除测试
//************************************************************************************
@Test
public void test04() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
/**
* 测试删除
*/
mapper.deleteEmpById(2);
//2、手动提交数据
openSession.commit();
} finally {
openSession.close();
}
}
}
哈哈~~~~~~~~第一个mybatis的helloworld练习结束了
2.mybatis的映射文件
mybatis操作数据库都编写在映射文件中,再对外提供映射文件的接口给服务层调用,因此映射文件非常重要
1.映射文件参数处理
1.建数据库表
使用mysql数据库
DROP TABLE IF EXISTS `tbl_employee`;
CREATE TABLE `tbl_employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(255) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tbl_employee
-- ----------------------------
INSERT INTO `tbl_employee` VALUES ('1', 'sujinran', '女', '[email protected]');
2.导包(maven)
在pom.xml中导入mybatis需要的依赖包
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
mybatis的映射文件找不到解决方法如下:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
3.javabean类
com.demo.bean.Employee 实体类
package com.demo.bean;
public class Employee {
private Integer id; //编号
private String lastName; //姓名
private String email; //邮箱
private String gender; //性别
public Employee(Integer id, String lastName, String email, String gender) {
this. id = id;
this. lastName = lastName;
this. email = email;
this. gender = gender;
}
public Employee() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this. id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this. lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this. email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this. gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", gender=" + gender + "]";
}
}
4.mybatis 配置文件
mybatis-config.xml
<?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>
<!--
1、 mybatis可以使用properties来引入外部properties配置文件的内容;
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
-->
<properties resource="dbconfig.properties"></properties>
<!--
2、 settings包含很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 3、 typeAliases:别名处理器:可以为我们的java类型起别名
别名不区分大小写
-->
<typeAliases>
<!-- 1、 typeAlias:为某个java类型起别名
type:指定要起别名的类型全类名;默认别名就是类名小写; employee
alias:指定新的别名
-->
<!-- <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/> -->
<!-- 2、 package:为某个包下的所有类批量起别名
name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名
(类名小写),)
-->
<package name="com.demo.bean"/>
<!-- 3、批量起别名的情况下,使用@Alias注解为某个类型指定新的别名 -->
</typeAliases>
<!--
4、 environments:环境们, mybatis可以配置多种环境 ,default指定使用某种环境。可以
达到快速切换环境。
environment:配置一个具体的环境信息;必须有两个标签; id代表当前环境的唯一标识
transactionManager:事务管理器;
type:事务管理器的类
型;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)
自定义事务管理器:实现TransactionFactory接口.type指定为全类名
dataSource:数据源;
type:数据源类型;UNPOOLED(UnpooledDataSourceFactory)
|POOLED(PooledDataSourceFactory)
|JNDI(JndiDataSourceFactory)
自定义数据源:实现DataSourceFactory接口, type是全类名
-->
<environments default="dev_mysql">
<environment id="dev_mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 5、 databaseIdProvider:支持多数据库厂商的;
type="DB_VENDOR": VendorDatabaseIdProvider
作用就是得到数据库厂商的标识(驱动getDatabaseProductName()), mybatis就能根据
数据库厂商标识来执行不同的sql;
MySQL, Oracle, SQL Server,xxxx
-->
<databaseIdProvider type="DB_VENDOR">
<!-- 为不同的数据库厂商起别名 -->
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatisconfig.xml)中 -->
<!-- 6、 mappers:将sql映射注册到全局配置中 -->
<mappers>
<!--
mapper:注册一个sql映射
注册配置文件
resource:引用类路径下的sql映射文件
mybatis/mapper/EmployeeMapper.xml
url:引用网路路径或者磁盘路径下的sql映射文件
file:///var/mappers/AuthorMapper.xml
注册接口
class:引用(注册)接口,
1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录
下;
2、没有sql映射文件,所有的sql都是利用注解写在接口上;
推荐:
比较重要的,复杂的Dao接口我们来写sql映射文件
不重要,简单的Dao接口为了开发快速可以使用注解;
-->
<!--注册xml-->
<!-- <mapper resource="mybatis/mapper/EmployeeMapper.xml"/> -->
<!--注册接口:必须接口和映射文件同名同包-->
<!-- <mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> -->
<!-- 批量注册:必须接口和映射文件同名同包 -->
<package name="com.demo.dao"/>
</mappers>
</configuration>
5.数据库配置文件
dbconfig.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
6.mapper接口及映射文件
com.demo.dao.EmployeeMapper
package com.demo.dao;
import com.demo.bean.Employee;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
public interface EmployeeMapper {
// 查询
//单个参数处理
public Employee getEmpById(Integer id);
//多个参数处理
public Employee getEmpByIdAndLastName(@Param("id") Integer id, @Param("lastName") String lastName);
//如果多个参数不是业务模型中的数据,没有对应的pojo,不经常使用,为了方便,我们也可以传入map
public Employee getEmpByMap(Map<String, Object> map);
}
com/demo/dao/EmployeeMapper.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="com.demo.dao.EmployeeMapper">
<!--
单个参数处理
-->
<select id="getEmpById" resultType="com.demo.bean.Employee">
select id,last_name,email,gender from tbl_employee where id = #{id}
</select>
<!--多个参数处理-->
<!-- public Employee getEmpByIdAndLastName(Integer id,String lastName);-->
<select id="getEmpByIdAndLastName" resultType="com.demo.bean.Employee">
select * from tbl_employee where id = #{id} and last_name=#{lastName}
</select>
<!--多个参数不是业务模型中的数据,没有对应的pojo-->
<!-- public Employee getEmpByMap(Map<String, Object> map); -->
<select id="getEmpByMap" resultType="com.demo.bean.Employee">
select * from tbl_employee where id=#{id} and last_name=#{lastName}
</select>
</mapper>
7.测试
import com.demo.bean.Employee;
import com.demo.dao.EmployeeMapper;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources. getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
//*********************************************************************************
// 单个参数处理
//*********************************************************************************
@Test
public void test01() throws IOException {
// 1、获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
// 2、获取sqlSession对象
SqlSession openSession = sqlSessionFactory.openSession();
try {
// 3、获取接口的实现类对象
//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper. class);
Employee employee = mapper.getEmpById(1);
System. out.println(employee);
} finally {
openSession.close();
}
}
//*********************************************************************************
// 多个参数处理
//*********************************************************************************
@Test
public void test02() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper. class);
Employee employee = mapper.getEmpByIdAndLastName(1, "tom");
System. out.println(employee);
} finally {
openSession.close();
}
}
//*********************************************************************************
// 多个参数不是业务模型中的数据,没有对应的pojo
//*********************************************************************************
@Test
public void test03() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper. class);
Map<String, Object> map = new HashMap<>();
map.put("id", 1);
map.put("lastName", "Tom");
map.put("tableName", "tbl_employee");
Employee employee = mapper.getEmpByMap(map);
System. out.println(employee);
} finally {
openSession.close();
}
}
}