mybaits
创建步骤:
1建个项目
2将需要的包导入主要是mybaits 和mysql-conn包 buid path
3新建mb.xml
<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/user?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/baidu/mapper/StudentMapper.xml"/>
</mappers>
4件util类用来创建session和读取mb.xml(mb.xml最好要放到src下)
private static ThreadLocal local;
private static SqlSessionFactory factory;
static{
local = new ThreadLocal();
InputStream in = null;
try {
in = Resources.getResourceAsStream(“mb.xml”);
factory = new SqlSessionFactoryBuilder().build(in);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static SqlSession getSession(){
SqlSession session = local.get();
if(session==null){
session = factory.openSession();
local.set(session);
}
return session;
}
public static void closeSession(){
SqlSession session = local.get();
if(session!=null){
session.close();
local.remove();
local.set(null);
}
}
5创建pojo
可以加入log4j打印日志 log4j.propertie:加入log4j的jar包会自动读取无需配置
log4j.rootLogger=DEBUG,A3,STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.file=logs/server.log
log4j.appender.A3.MaxFileSize=1024KB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
6创建mapper.xml映射文件 要与接口同名并且路径要一致
<select id="findall" resultType="com.baidu.entity.Student" statementType="CALLABLE">
select * from student
</select>
<select id="findbyid" parameterType="int" resultType="com.baidu.entity.Student">
select * from student where id=#{id}
</select>
7编写测试类
//添加学生
SqlSession session=MbSessionFactory.getSession();
try {
StudentMapper sm=session.getMapper(StudentMapper.class);
Student s=new Student();
s.setSex("男");
s.setSid(5);
s.setSname("小三");
sm.addstudent(s);
session.commit();
System.out.println("插入成功");
} catch (Exception e) {
// TODO: handle exception
System.out.println( "插入失败");
session.rollback();
}
finally{
session.close();
}
完
tips
#是占位符相当于prepstatement中的?
写法#({类的属性})
如果参数为单值参数,里面可以随便写
#和$的区别
使用模糊查询时 list=sm.finduserbytitle("%s%");
(
)
里
面
只
能
用
v
a
l
u
e
而
且
外
面
要
加
‘
’
<
s
e
l
e
c
t
i
d
=
"
f
i
n
d
u
s
e
r
b
y
t
i
t
l
e
2
"
p
a
r
a
m
e
t
e
r
T
y
p
e
=
"
S
t
r
i
n
g
"
r
e
s
u
l
t
T
y
p
e
=
"
S
t
u
d
e
n
t
"
>
s
e
l
e
c
t
∗
f
r
o
m
s
t
u
d
e
n
t
w
h
e
r
e
s
n
a
m
e
l
i
k
e
′
()里面只能用value 而且外面要加‘’ <select id="finduserbytitle2" parameterType="String" resultType="Student"> select * from student where sname like '
()里面只能用value而且外面要加‘’<selectid="finduserbytitle2"parameterType="String"resultType="Student">select∗fromstudentwheresnamelike′{value}’
并且jdbc打印的sql语句不带占位符?
select * from student where sname like ‘%s%’
所以为了防止注入尽量不用$
列名与类属性名称不一致的情况:
1使用别名 select id as sid,sname,sex from student
2使用resultmap